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);