2013-08-25 10 views
0

인터넷에서 페이지를 다운로드하고 일부 조작을 수행하는 코드를 작성하려고합니다. 이 페이지는 iso-8859-1로 인코딩됩니다.Ruby 1.9 iso-8859-8-i 인코딩

이 파일을 처리 할 수있는 방법을 찾을 수 없습니다. 히브리어로 파일을 검색하고 변경된 파일을 사용자에게 반환해야합니다.

string.encode을 사용하려고했지만 여전히 잘못된 인코딩을 사용합니다. 그 정의되지 않은 같은 "encoding":{},이는 반환 내용의 예입니다 : 응답 인코딩을 인쇄 할 때

, 내가 얻을

\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffd-\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffd\ufffd\ufffd       

그것은 히브리어 문자이어야한다.

final.body.encode('iso-8859-8-i')으로 시도하면 code converter not found (ASCII-8BIT to iso-8859-8-i) 오류가 발생합니다.

+1

인코딩 문제는 여러 가지 일 수 있습니다. 정확한 단계와 작동하지 않는 코드의 예를 추가하여 구체적인 내용을 추가 할 수 있습니까? 분명히 그것은 입력 파일에 의존하기 때문에, 파일을로드하는 위치와 그 단계에서'p file_contents.encoding'이 출력하는 것을 표시하십시오. –

+0

추가 정보 –

답변

1

Ruby 나 OS가 인코딩을 잘못 지정하면 입력이 이루어져서 변환이 작동하지 않습니다. Ruby는 잘못된 가정으로 시작하여 변환 할 때 잘못된 문자를 유지하려고하기 때문입니다. 올바른 인코딩이 무엇인지 다른 소스에서 알고있는 경우

그러나, 당신은 어떻게이 String에로드 한 바이트를 해석하는 루비에게 force_encoding 방법을 사용할 수 있습니다. 이것은 개체를 제자리에 변경합니다.

예. 루비가 제대로되어 그것을 다루는 어떤 자에게 있기 때문에이 시점에서

contents = final.body 
contents.force_encoding('ISO-8859-8') 
puts contents 

는 (작동 제공), 당신은 지금, 변환 (예를 들어, UTF-8로) 할 수 있습니다.

내 버전의 Ruby에서 'ISO-8859-8-I'을 찾을 수 없습니다. 나는 당신이 필요로하는 것이 얼마나 가까운지 'ISO-8859-8'이 얼마나 가까운 지 아직 확신하지 못한다. (...-I 인코딩을 사용할 수 없다면 어떤 인터넷 검색은 사용자에게 도움이 될 것이라고 제안한다.)

+1

이 방법 [**'default_external = ** **] (http://www.ruby-doc.org/core-2.0/Encoding.html#method-c-default_external-3D)을 알려주십시오.)가 사용됩니까? –

+0

@ 바바이 : 좋은 질문입니다. 이것은 적절할 수도 있습니다 (변경된 글은 루비 코드에서 호출되지 않았 음을 제안 했음에도 불구하고 변경의 글로벌 성질로 인해). 아마 처음에는 소스를 열 때 인코딩을 설정하는 것이지만 OP는이 방법을 사용하지 않았기 때문에 내 대답은 내가 질문에서 볼 수있는 것을 기반으로 한 패치입니다. 또한 HTTP 헤더에서 인코딩이 전송되지 않을 수도 있으므로 OP는 선택의 여지가 없어도 인코딩을 선택해야합니다. –

+0

Humm .. 당신의 대답에 대해 나는 woun't comment ... 나는이 방법이 또한 도움이 될 수 있다면 나는 단지 체크하고 있었다. 그것은 frnd이다 :) –