사용자:YellowChick/연습장

위키백과, 우리 모두의 백과사전.

UTF-8 의 안드로이드를 위한 형변환은 UTF-8 형식으로 통신망(WAN,LAN)을 통하여 전달된 한글문자열을 디바이스(특히 안드로이드)내부에서 재가공을 위해서 요구하는 형태(wchar_t 등)으로 변형하거나 복구하는 것을 말한다.

개념[편집]

한글은 UNIX, WINDOWS, ANDROID, iOS 등의 환경에서 각각 여러가지 형태로 데이터를 주고 받고 있다.

최근에 이러한 여러가지 방식중 가장 널리 쓰이고 있는 방식이 UTF-8 방식이다.

각종의 parser 에서는 호환성을 위하여 시스템에서 큰 용량의 메모리를 차지하는 wchar_t 형태의 구조를 많이 사용한다.

이 문서에서는 통신에서 UTF-8 형식으로 받아온 문자열을 재가공(파싱)하기 위해 가장 널리 쓰이는 wchar_t 형태로 변형하는 방법에 대하여 서술한다.

const char 형식과 UTF-8 형식간의 변형[편집]

안드로이드 에서 통신으로 읽어온 문서는 const char * 형태로 전달되는데 읽어올때 이미 한글을 읽기 위한 방법으로 일반적으로 UTF 형식으로 읽어오게 되어 있다.

하지만 이것을 그대로 string 또는 wchar_t 형식으로 대입해서 사용하면 안드로이드 디바이스에서 보여지는 한글은 깨지게 된다.

이때 WIN PC 의 비쥬얼 스튜디오나 이클립스 등의 개발 환경에서 디버깅 또는 메세지로 확인 하는 경우에는 이러한 변형을 하지 않은 상태로도 잘 인식된 것 처럼 보인다.

이는 과정의 문제로 UTF 형식으로 읽어온 한글을 그대로 string 또는 wchar_t 형식을 사용하는 parser 를 통하여 사용하고 나서 다시 string 형식으로 출력하는 데서 비롯된다.

해결 방법[편집]

해결방법은 JAVA 단계에서 읽어와서 C++ 단으로 넘어온 온 한글을 const char * 형태에서 wchar_t 형태로 넘겨주기 전에 먼저 변수타입에 맞는 형태로 변형시켜주는 것이다.

변형하는 방법은 비트연산에 의한 위치바꿈에 의해 이루어진다.

이것 은 LDAP 에서 공개한 변형 관련 라이브러리 소스의 일부이다.

이 소스를 발췌하여 자신의 프로젝트에 넣으면 안드로이드 디바이스에서 제대로 된 한글을 볼 수 있다.

주의[편집]

선행작업으로, 이 문서는 통신이 아닌 L"가나다라마" 형식으로 헤더에서 정의한 한글이 안드로이드 디바이스에서 제대로 출력되는 상황에서 통신으로 읽어온 한글이 제대로 출력되지 않는 경우에 대하여 설명하고 있다.

만약 단 한번도 한글이 디바이스에서 출력되는 것을 못 봤다면 트루타입폰트를 출력할 수 있는 freetype2 의 안드로이드 버전을 다운로드 하여 그것이 안드로이드 디바이스에서 출력되도록 먼저 인스톨하여야 한다.

게임을 개발하여 서비스하기 위해선 OPENGL 모드로 화면에 각종 그래픽을 보여줘야 하는데, 이 상태에서 한글을 제대로 화면에 출력하려면 트루타입폰트를 그래픽공간에 출력해주기 위한 freetype 라이브러리를 적용시켜야 한다.