2013-06-07 5 views
0

Ruby 1.9.3-429에서 궁극적으로 UTF-8 문자열로 변환 될 다양한 인코딩의 일반 텍스트 파일을 구문 분석하려고합니다. 비 ASCII 문자는 UTF-8로 인코딩 된 파일로 잘 작동하지만 UTF-8이 아닌 파일에는 문제가 발생합니다.인코딩 변환시 일치하지 않는 IO 문자 읽기

간단한 예 :

File.open(file) do |io| 
    io.set_encoding("#{charset.upcase}:#{Encoding::UTF_8}") 
    line, char = "", nil 

    until io.eof? || char == ?\n || char == ?\r 
    char = io.readchar 
    puts "Character #{char} has #{char.each_codepoint.count} codepoints" 
    puts "SLICE FAIL" unless char == char.slice(0,1) 

    line << char 
    end 
    line 
end 

두 파일이 적절하게 인코딩 된 단 하나의 문자열 áÁð 있습니다. 나는 파일이 UTF-8 파일로 $ file -i <file_name>

를 통해 제대로 인코딩 된 것을 확인했다, 내가 다시 얻을 :

Character á has 2 codepoints 
SLICE FAIL 
Character Á has 2 codepoints 
SLICE FAIL 
Character ð has 2 codepoints 
SLICE FAIL 

:이 ISO-8859-1 파일로

이걸 해석하는 방식은 readchar입니다. 슬라이스가 잘못 반환되도록 인코딩이 잘못 변환되었습니다.

이 동작이 정확합니까? 아니면 외부 인코딩을 잘못 지정 했습니까? 나는이 과정을 다시 쓰지 않으므로 어딘가에서 실수를 저 지르고 싶다. 이 방법으로 파일을 구문 분석하는 이유는 있지만 그 질문은 내 질문과 관련이 없다고 생각합니다. File.open에 내부 및 외부 인코딩을 옵션으로 지정하면 동일한 결과가 나타납니다.

답변