파일을 읽어서 해당 파일의 문자셋을 판단해주는 코드
안녕하세요... 참 오랜만에 들리네요.. ^^;
최근에 노트북 한대로 qloud media/air video 서버를 구성해서 온가족이 자신의 안드로이드, ios디바이스 구별없이 이동중이나 침대에서 편리하게 영화와 드라마를 봐왔는데요....
문제가 qloud에서는 BOM이 없는 UTF-8자막파일을 제대로 인식못하는 문제가 있더라구요. (에어비디오는 BOM유무 무관)
airvideo에서 잘 나오는 자막도 qloud에서는 깨져나올때가 많았습니다.
그래서 목마른 놈이 우물 판다고 EUC-KR을 UTF-8자막으로 바꾸고 BOM이 없으면 넣어주는 간단한 프로그램을 하나 만들었습니다.
마그넷 링크를 첨부하니 혹시라도 쓰실 분들은 참고하시구요 ^^;
magnet:?xt=urn:btih:9903CA36DC217DC4BC17456C719A3CBFBCA359D3&dn=charsetChage&tr=http%3a%2f%2fannounce.torrentsmd.com%3a6969%2fannounce
여기서부터 진짜 본문입니다^^
이 프로그램을 짜는 과정에서 좋은 라이브러리를 알게 되어서 올려봅니다.
라이브러리는 http://code.google.com/p/juniversalchardet/
위 주소에서 받으시구요...
아래는 예제 코드입니다.
파일이 조금 손상되있거나 특이한 경우는 인코딩 값이 null이 나올때도 있지만 대부분 잘 판독해주더라구요.
필요하신 분들 참조하셔요 ^^
import org.mozilla.universalchardet.UniversalDetector;
public class TestDetector {
public static void main(String[] args) throws java.io.IOException {
byte[] buf = new byte[4096];
String fileName = args[0];
java.io.FileInputStream fis = new java.io.FileInputStream(fileName);
// (1)
UniversalDetector detector = new UniversalDetector(null);
// (2)
int nread;
while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
// (3)
detector.dataEnd();
// (4)
String encoding = detector.getDetectedCharset();
if (encoding != null) {
System.out.println("Detected encoding = " + encoding);
} else {
System.out.println("No encoding detected.");
}
// (5)
detector.reset();
}
}