UTF-8 컨버젼 매크로(UTF-8 String Conversion Macros)
Software Development/Article 2008/06/26 18:10Introdution
UTF-8 string을 처리하는 경우 UTF-8 string <-> Ansi string 또는 UTF-8 string <-> Unicode string 간의 변환이 종종 필요할 때가 있다. MultiByteToWideChar 함수와 WideCharToMultiByte를 이용하면 변환이 가능하지만 이 작업을 꽤나 까다롭게 느끼시는 분들이 많이 있는 것 같다. 특히 UTF-8 string <-> Ansi string 의 경우 두 단계를 거쳐서 변환해야하기 때문에 이 부분에 대해서 질문 하시는 분이 많았다. 이런 점을 조금이나마 개선해 보고자 한 문장으로 변환할 수 있는 매크로를 만들게 되었으며, 이 글에서는 이 매크로에 대해서 설명하고자 한다.
How To
인터페이스는 Unicode string <-> Ansi string 변환 시에 많이 사용하는 ATL String Conversion Macros를 흉내내서 만들어 봤다. 사용해본 사람은 알겟지만 Conversion Macros가 MultiByteToWideChar등의 함수를 직접 사용하는 것보다 훨씬 쉽고 간편하다. UTF-8 String Conversion Macros 에서는 두 가지 방식의 매크로를 제공하는데 한 가지는 스택 메모리를 사용하는 방식(ex. A2UTF8)이고 또 한가지는 전자보다는 좀 더 안전하게 힙 메모리를 사용하는 방식(ex. A2UTF8_EX)이다. 물론 사용자가 구현 방식을 알고 있을 필요는 없다. 다만 엄청나게 긴(스택에 담을 수 없을 만큼) 문자열을 다룰 경우 후자가 더 안전하다는 것만 알고 있으면 된다.
Usage
ATL String Conversion Macros의 용법을 알고 있다면 UTF-8 String Conversion Macros도 사용하기 매우 쉬울것이다. 하지만 모른다 해도 어려운 것은 아니니 걱정할 필요는 없다. 용법을 살펴보면 다음과 같다.
SourceType2DestinationType[EX]
SourceType과 DestinationType에는 아래에서 설명할 타입을 넣어주면 되고 힙을 이용한 방식 사용할 경우 뒤에 _EX를 붙여주기만 하면 된다. 변환 가능한 타입은 아래와 같다.
A ANSI character string.
W Unicode character string.
T Generic character string.
UTF8 UTF-8 encoded character string.
ATL String Conversion Macros와 다른 점은 UTF8이 추가된 것 뿐이고, 당연한 얘기지만 SourceType 과 DestinationType중 하나는 반드시 UTF8이어야 한다. 예를 들어 ANSI string -> UTF-8 string 의 변환의 경우 A2UTF8 또는 A2UTF8_EX를 사용하면 된다.
마지막으로 한가지 알아야 할 것은 매크로를 사용하기 전에 UTF8_CONVERSION / UTF8_CONVERSION_EX 매크로를 선언해 줘야 한다는 것이다. 이것 또한 ATL String Conversion Macros과 같으니 쉽게 이해할 것이라 생각하고, 간단한 예제로 설명을 마치도록 하겠다.

UTF8Conv.h