Programming
인코딩 타입 알아내기
vicjung
2011. 10. 4. 16:27
[그림출처:http://wiki.secondlife.com/wiki/Unicode_In_5_Minutes]
인코딩 타입이란 특정 캐릭터셋으로 만들어진 파일을 보여주는 방식입니다. 전세계 주요 언어문자를 하나의 바이너리 코드로 처리하기 위해서 유니코드(unicode)를 만들었지만 이 코드를 보여주는 인코딩 방식은 다양합니다.
많이 사용하는 인코딩 타입으로는 UTF-8, UTF-16, EUC-KR, ISO8859-1, MS949등이 있는데요, 텍스트 파일이 어떤 인코딩 타입으로 설정되어 있느냐에 따라 똑같은 유니코드 데이터도 제대로 보이기도 안보이기도 합니다. 그럼 이 파일이 어떤 인코딩타입으로 되어 있는지 알아내려면 어떻게 해야 할까요?
BOM이라는게 있습니다. BOM(Byte Order Mask)은 파일이 어떤 인코딩 타입임을 나타냅니다만 어떤 에디터는 이 BOM을 생략하기도 하기때문에 절대적이라고 볼 수는 없습니다.
그럼 자바로 쉽게 인코딩 타입을 확인할 수는 없을까? ICU를 이용하면 가능합니다.
ICU(International Component for Unicode)는 이와 관련된 라이브러리를 제공합니다. C와 Java를 지원하며 제가 확인한 것은 자바용인 ICU4J입니다.
1.Maven의 POM에 관련 설정을 추가합니다.
<dependency>2.유틸리티 함수를 하나 추가합니다. 저의 경우에는 FileUtil이라는 유틸클래스에 추가했습니다.
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>4.0.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
public static String readFileToString(File file) throws Exception {테스트해 보니 EUC-KR, UTF8인 경우에는 잘 동작합니다. 많이들 필요할것 같은데 의외로 자료가 없어서 찾는데 애를 좀 먹어서 정리해놓습니다.
try {
CharsetDetector detector = new CharsetDetector();
detector.setText(FileUtils.readFileToByteArray(file));
return FileUtils.readFileToString(file, detector.detect().getName());
} catch (IOException e) {
throw new Exception(e);
}
}