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
에 내부 및 외부 인코딩을 옵션으로 지정하면 동일한 결과가 나타납니다.