공부
Java에서 UTF-8 BOM(ByteOrderMark)이 제대로 처리 되지 않는 문제
찬
2013. 4. 23. 14:03
반응형
백만년 만에 글. 너무 글을 안써서 오랜만에 생각나서 써 봄. ㅋ
Java에서 제공하는 기본적인 Reader계열에서는 UTF-8의 BOM을 제대로 처리하지 못합니다. 그렇기 때문에 BOM이 있는 UTF-8 stream을 Reader로 넣으면, String의 제일 앞글자에 0xfeff 가 들어 오는 문제가 생깁니다.
"UTF-8의 BOM을 제대로 처리 못하는 Java의 문제가 아니냐?" 고 물을 수 있겠지만은, Unicode 표준에는 UTF-8에 대해서는 BOM을 적지 않도록 권고(neither required nor recommended)하고 있습니다. 그런데 MS Windows 계열에서 만들어진 일부 문서에서는 BOM을 포함하는 경우가 종종있습니다.
이를 해결할 수 있는 방법은,
1. BOM에 대한 정보를 inputStream에서 미리 읽어 버리고, BOM 이후부터 Reader에서 읽도록 처리하는 방법
2. 얻어진 String에서 tmp = tmp.replace("\uFEFF", ""); 와 같은 방법으로 0xfeff 무시하기
3. 각종 외부 라이브러리를 이용해서 처리 하기
입니다.
반응형