2012-12-28 4 views
2

내가 사용하고 (그리고 붙어) 루비의 다음 버전 :루비 1.8.7에서 Microsoft Office "스마트"또는 "구두"따옴표/아포스트로피를 ASCII 또는 UTF-8 "직선"인용/아포스트로피로 변환하는 방법?

ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux] 

제가 인터넷 검색을 많이했지만, 나는 내 문제에 대한 작업 답을 찾을 수 없습니다. 일반적으로 사용자의 Microsoft Excel 스프레드 시트에서 가져올 CSV 파일을 가져오고 있습니다. CSV 부분에 문제가 없지만 MS "스마트"따옴표를 처리하는 방법을 알 수 없습니다. 내 테스트에 대한 나의 입력 파일은 DOS 형식이며,이 라인이 포함되어

쟌느 오닐을

는 AS 내 텍스트 편집기에서 보여 오닐의 O와 N 사이의 MS 곱슬 아포스트로피가있다

"물음표 다이아몬드". 나는 다음과 같은 코드를하려고하면 곱슬 아포스트로피가 제거됩니다 : 루비 1.8.7에서 정규 표현식을 작성하는 방법이 있나요

쟌느 오닐

:

# replace Microsoft Office 'smart' quotes 

# gem to detect character encoding 
require 'rchardet' 
if name != nil 
    cd = CharDet.detect(name) 
    encoding = cd['encoding'] 
    name = Iconv.conv('UTF-8//TRANSLIT', encoding, name) 
end 

이 바람직하지 않은 결과를 산출 곱슬 한 MS 문자를 감지하고 직선 문자로 바꿉니 까? 내 정규 표현식에서 16 진수 코드를 사용하여 시도했다,하지만 그들을 작동하게 만들 수 없습니다. Ruby 1.8.7이 1.9의 문자 인코딩을 처리하는 데 훨씬 제한적이라는 것을 알고 있습니다. 그러나 나는 그것에 매달 렸습니다. 이 프로젝트에서는 Ruby를 업그레이드 할 수 없습니다.

도움을 주시면 감사하겠습니다. 고맙습니다.

통조림업자에 의해 제안 된 게시물을 읽고 나면, 내가 그 결과 '¿ ½'하위 문자열을 대체 할 GSUB를 사용하여 시도 :

if name != nil 
    name = Iconv.conv("UTF-8", "cp1252//TRANSLIT", name) 
    name.gsub(/\u00ef\u00bf\u00bd/u, "'") 
end 

아아, 아니 사랑을. 그것은 여전히 ​​같은 결과 :(

+0

을 업데이트했다. 즉, 하나 개의 이상한 문자입니다. – Linuxios

+0

코드를 수정하는 것이 완전히 새로운, 관련없는 코드를 작성하는 것보다 훨씬 낫습니다. 다시 작성해야합니다. 그것을 다시 통합 시켜라. –

+0

[iconv를 사용하여 멀티 바이트 스마트 인용 부호를 확장 ASCII 스마트 인용 부호로 변환 할 수 있습니까?] (http://stackoverflow.com/questions/6087309/can-i-use-iconv-to-convert-multi- 스마트 - 따옴표 - 확장 - ascii - 스마트 - 따옴표) –

답변

0

내가 PHP에서 이런 짓을 산출하고 완벽했다.이?

$text = str_replace('�', '"', $text); 

이 apostrophies 설명하기 위해 존재와 MySQL을 위해 탈출하는 경우 어쩌면 당신은 루비 상당을 시도 할 수 있습니다, I 왜 당신은 우리에게 당신의 정규 표현식에의 진수 - 코드를 사용하기 위해 작성한 코드를 표시하지 않습니다이 내 코드 ... 내가 너무 OSX에? 다이아몬드를 얻을 수

$bad_symbols = array('�t', '�s', '�ll', '�ve', '�d', '�re', '� ', ' �'); 
$replacements_for_bad_symbols = array("\'t", "\'s", "\'ll", "\'ve", "\'d", "\'re", '" ', ' "'); 
$text = str_replace($bad_symbols, $replacements_for_bad_symbols, $text); 
관련 문제