2014년 11월 10일 월요일

Mac OS에서 Java File명 한글 자소 분리 현상

Mac OS X 10.10 Yosemite 에서 JDK 1.7 환경에서 작업중이었는데,

파일 명이 아래와 같은 파일일때 

강원도_강릉시_001.html

아래의 for 구문에서 "강원도_강릉시"를 추출해서 Map의 키로 사용하는 코드를 작성 중인덴
자꾸 Null 을 리턴한다.


for(String filename: storeDir.list(new ExtensionFilenameFilter(".html"))) {
    String districtIdKey = filename.substring(0, filename.lastIndexOf('_'));
}


우연히 화면에 찍힌 로그를 카피해서 이클립스가 아닌 다른 에디터에 붙혀넣기 했더니
한글의 자소가 모두 분리 된 것처럼 찍혔다.
ㄱㅏㅇㅇㅝㄴㄷㅗ_ㄱㅏㅇㄹㅡㅇㅅㅣ ... 뭐 이런 식으로..

그래서 아래와 같이 문자배열을 받아서 찍어 봤더니, 진짜로 한글의 각 자소가 찍히면서
문자열 자체가 다른 것으로 보여졌다.

char[] arr = districtIdKey.toCharArray();
for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i] + " ==> " + Integer.toHexString(arr[i]));
}

ᄀ ==> 1100
ᅡ ==> 1161
ᆼ ==> 11bc
ᄋ ==> 110b
ᅯ ==> 116f
ᆫ ==> 11ab
ᄃ ==> 1103
ᅩ ==> 1169
_ ==> 5f
ᄀ ==> 1100
ᅡ ==> 1161
ᆼ ==> 11bc
ᄅ ==> 1105
ᅳ ==> 1173
ᆼ ==> 11bc
ᄉ ==> 1109
ᅵ ==> 1175


해결책

java.text.Normalizer 클래스를 이용하여 해결함.

districtIdKey = Normalizer.normalize(districtIdKey, Normalizer.Form.NFC);

댓글 1개: