IT, Programming/Android

안드로이드 전체 charset 목록 정보 확인하기

우주먼지 [宇宙塵, cosmic dust] 2014. 8. 27. 10:31

안드로이드 전체 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)에 전체 캐릭터 셋으로 디코딩한 결과가 주르르륵 뜨는 것을 볼 수 있다.