사용자: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 라이브러리를 적용시켜야 한다.