티스토리 뷰
text file을 line별 parsing을 하고 split 하려던 중, 오류 발생.
-> ruby invalid byte sequence in utf 8
-> ruby도 encoding 문제에서 자유롭지 못함.
-> 사실 이건 모든 프로그래밍 언어의 문제...정확히는 윈도우와의 호환에서 생기는 문제.
-> 해당 문자열에 force_encoding("iso-8859-1").encoding("UTF-8")을 하니 처리 되기 시작.
-> 헌데, 읽혀진 문자열에 유효하지 않은 공백이 포함됨.
text 파일이 ANSI, utf-8은 정상적으로 읽힘. 헌데, unicode option의 text file만 안읽힘. (notepad encoding option중 utf-8, ANSI는 정상적이고, unicode에서만 문제가 생김)
-> 각종 encoding option 으로 해결 안됨.
-> line 별 encoding 을 시도.
-> 첫번째 라인만 encoding 됨. 두번째 라인부터 꼬임.
-> line별 encoding을 확인해보았더니, 두번째 라인부터는 CP949 (ascii code page 949)로 인식되는 것을 확인.
-> C++에서 binary로 읽어 메모리값 확인해보니 처음 2byte가 254,255로 들어가 있었음. 이 값이 인코딩 방식에 대한 기록 값이었던 것.
-> C++에서 binary로 읽어 메모리값 확인해보니 처음 2byte가 254,255로 들어가 있었음. 이 값이 인코딩 방식에 대한 기록 값이었던 것.
-> 파일 전체를 열고 버퍼 전체를 인코딩 해보았더니 정상적으로 읽힘.
-> 해결!
정리하자면,
IO.foreach('file.rb') do | line | line.encode!("UTF-8", "UTF-16le", :invalid => :replace, :undefined => :replace, replace: "") end
위와같이 변환시에는 첫 라인만 제대로 변환되고 두번째 라인부터는 값이 망가지더군요.
그래서,
lines = Array.new fSize = aFile.stat.size if aFile content = aFile.sysread(fSize) content.encode!("UTF-8", "UTF-16le", :invalid => :replace, :undefined => :replace, replace: "") lines = content.split(/(\n)/) else puts 'Unable open file' end
위와같이 파일에서 읽은 내용 전체를 한번에 변환시 잘 처리 되었습니다.
stackoverflow의 관련 글
- http://stackoverflow.com/questions/14035307/ruby-invalid-byte-sequence-in-utf-8-argumenterror
- http://stackoverflow.com/questions/11065962/ruby-split-invalid-byte-sequence-in-utf-8-argumenterror
'Scripts > Ruby' 카테고리의 다른 글
Welcome to ruby! (0) | 2014.11.04 |
---|---|
루비에서 쉘 명령을 내리는 방법 (0) | 2014.06.03 |
루비 주석 (0) | 2014.02.07 |
루비 변수 관련 정리 (0) | 2013.05.14 |
Ruby가 모듈을 찾는 장소. (0) | 2013.05.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SQLite Spy
- 루비 온 레일즈
- MS-SQL
- 임백준
- 바로가기 프로그램
- 디자인 패턴
- c언어
- SDL
- ftp
- 좋은 프로그래머
- ruby
- Ruby on Rails
- CppSQLite
- 리버스 엔지니어링
- svn
- RoR
- TDD
- 디버깅
- 엘키
- Rails
- EasyExec
- 루비
- 게임데브포에버
- 게임개발포에버
- TraceRoute
- 멀티스레드
- NDC2013
- 조엘 온 소프트웨어
- EzShortcut
- perfmon
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함