안드로이드 전체 charset 목록 정보 확인하기
안드로이드 전체 charset 목록 정보 확인하기
안드로이드에서다른 플랫폼에서도 마찬가지겠지만 개발을 하다 보면 문자열을 다룰 때에 해당 문자열이 무엇으로 인코딩(encoding)되어 있는지 몰라서 난간할 때가 있다. 보통은 'UTF-8'로 거의 되어 있지만 'UTF-16LE', 'UTF-16BE', MS949' 등등으로 되어 있는 경우도 가끔 있다. 혹은 이도 저도 아니고 문자열인건 확실한데 대체 뭘로 인코딩 되어 있는지 알 수가 없는 난감한 경우도 있다비알파벳권 국가의 비애.
예를 들면 어떤 파일내에 meta정보 형식으로 들어있는 문자열을 parsing할 때에 종종 발생한다. 대표적인 예로는 MP3 TAG 정보에 저장되어있는 가사(lylics)정보가 있겠다.
이럴 때-문자열인건 확실한데 대체 뭘로 인코딩 되어있는지 모를때-는 이것 저것 대표적인 charset으로 디코딩(decoding)해보고 출력해서 알아내곤 한다(정보를 제공한 곳의 파일스펙을 확인하거나 만든 사람한테 물어보는게 빠르지만 이런 것이 여의치 않을 때).
그런데 대표적인 charset을 다 넣어 보았는데도 '¶!@#$쮕루뷫★□□□□□' 같은 결과가 나오면 난감하기 그지 없다. 이럴때는 개발하는 플랫폼의 SDK에서 지원하는 모든 charset들로 decoding 해보고 싶은 욕구가 들 때가 있다. 과연 이게 문자열이 맞기는 하는지...네가 이기나 내가 이기나 해보자 다 바꿔볼꺼야. 그런경우는 다음 코드로 전체 charset을 이용하여 decoding을 시도해 볼 수 있다.
for (Map.Entry<String, Charset> entry : Charset.availableCharsets().entrySet()) { final String value = new String(buffer, entry.getValue()); Log.d("Result", value); } |
※ buffer : 어떤 charset으로 변환되어 있는지 모르는 byte[] buffer
위 코드를 사용하면 로그캣(logcat)에 전체 캐릭터 셋으로 디코딩한 결과가 주르르륵 뜨는 것을 볼 수 있다.