안드로이드 전체 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)에 전체 캐릭터 셋으로 디코딩한 결과가 주르르륵 뜨는 것을 볼 수 있다.
'IT, Programming > Android' 카테고리의 다른 글
안드로이드 Asset file 사용하기 (모두 읽어오기) (0) | 2014.08.29 |
---|---|
안드로이드 InputStream을 ByteArray로 바꾸기 (InputStream to ByteArray) (0) | 2014.08.28 |
안드로이드 스테이터스 바(status bar) 높이 구하기 (1) | 2014.08.28 |
안드로이드 작업 기기(폰, 태블릿) DPI 알아내기 (0) | 2014.08.27 |
안드로이드 ANT build 환경 구축하기 (0) | 2014.08.26 |