BOM 이 있는 File인 경우에는 자동으로 읽을 수 있는 옵션을 제공해줍니다.
public StreamReader( Stream stream, bool detectEncodingFromByteOrderMarks )
하지만 BOM이 없는 경우에는 딱히 자동으로 확인 할 수 있는 방법이 없습니다.
그래서 어떻게 확인 가능한 방법이 없을까 검색하던중
Notepad에서 characterset을 확인하는 방법을 소개한 blog를 발견하였습니다.
http://blogs.msdn.com/b/oldnewthing/archive/2004/03/24/95235.aspx
예를 들어서 "Hello" 가 저장되어 있는 Text File인 경우 각각의 characterset 및 BOM 여부에 따라서 아래와 같이 저장됩니다.
* Traditional ANSI encoding
48 65 6C 6C 6F
* Unicode (little-endian) encoding without BOM
48 00 65 00 6C 00 6C 00 6F 00
* Unicode (little-endian) encoding with BOM
FF FE 48 00 65 00 6C 00 6C 00 6F 00
* Unicode (big-endian) encoding without BOM
00 48 00 65 00 6C 00 6C 00 6F
* Unicode (big-endian) encoding with BOM
FE FF 00 48 00 65 00 6C 00 6C 00 6F
* UTF-8 encoding with BOM
EF BB BF 48 65 6C 6C 6F
* UTF-7 encoding with BOM
2B 2F 76 38 2D 48 65 6C 6C 6F
위 7가지에 대해서 Check를 자동으로 하여 File 내용을 읽어주는 함수를 만들어 봤습니다.
Encoding에 맞게 읽으면 왠만해서는 그대로 사용이 가능하지만,
사용하는 Platform에 따라 안되는 파일이 있어서 다시한번 Convert 하는 Code를 넣었습니다.
* Code
댓글 없음:
댓글 쓰기