2012-12-04 3 views
0

고객이 제공 한 대형 데이터 파일을 읽을 수있는 앱이 있습니다. 내가 정규식 패턴을 볼 경우 String.match을 사용하고어떻게 찾거나 수정합니까? ArgumentError : UTF-8의 바이트 시퀀스가 ​​잘못 되었습니까?

ArgumentError: invalid byte sequence in UTF-8 

: 내가 오늘받은 하나 개의 파일에, 그것은과 실패, 몇 가지와 함께 완벽하게 작동하지만.

파일을 보면 아무 것도 작동하지 않는 것 같습니다.

조언?

편집 : 사용자 이름에 'xE9'문자가있는 것처럼 보입니다.

+0

당신이 페이지의 오른쪽에있는 관련 질문의보고 했습니까? 다음을 읽어보십시오. http://stackoverflow.com/search?q=[ruby]+invalid+byte+sequence –

+0

http://stackoverflow.com/questions/6374756/why-do-i-get-an- 잘못된 바이트 시퀀스의 utf - 8 - 오류 - 읽기 - 텍스트 파일? rq = 1 –

+0

했어. 어떤 것도 적용되지 않는 것 같았습니다. 텍스트 파일을 한 줄씩 읽는 중입니다. – n8gard

답변

2

@muistooshort의 도움 덕분에 파일을 ISO 모드로 연 다음 줄 단위로 읽고 UTF-8로 변환합니다.

myfile = File.open('thefile.txt', 'r:iso8859-1') 
    while rawline = myfile.gets 
    line = rawline.force_encoding('utf-8') 
    # proceed... 
end 
+0

이것이 이상적인 해결책은 아니지만 여러 가지 영향을받는 데이터 파일에서 충분히 간단하고 완전히 해결 된 것으로 보입니다. – n8gard

0

솔루션을 보여 약간의 레이크 작업 :

task :reencode, [:filename] => [:environment] do |t, args| 
    myfile = File.open(args[:filename], 'r:iso8859-1') 
    outfile = File.open(args[:filename] + ".out", "w+") 
    while rawline = myfile.gets 
    line = rawline.force_encoding('utf-8') 
    outfile.write line 
    end 
    outfile.close 
end 
관련 문제