귀찮은 Charset (MLang API에 대해서)

예전에는 MultibyteToWideChar 인가 이런 것을 썼던 것 같은 데, Programming에서 절로 골치아픈것이 한글처리이다. 보통은 DBCS 체계(흔히 euc-kr)에서와 Unicode처리에서 고민하게 되는 데, MLang API가 색다르게 이런 문제를 해결해주기도 한다.

Visual Studio에서 C++ Programming 을 할 때 Project의 속성을 보면 Charset을 설정할 수 있다. 상위에 보면, MBCS(Multi-Byte Character Set)을 이용하는 것으로 되어 있다. 이 경우에 code editor에서 Text를 입력하면, 이는 한글일 경우, euc-kr format을 따른다.

 

보면, 0xb0, 0xa1 = ‘이렇게 되어 있다. 이것을 MLang APICreateConvertCharset, DoConversion을 이용하면, unicode로 변경할 수 있다.

  

물론, 그 반대도 가능하다. 만일, 속성의 CharsetUnicode 사용을 Check하면, Edit에 입력된 가나다abc”Unicode charset으로 저장된다. 이를 CreateConvertCharset Function을 통해서 1200(unicode) 20949(euc-kr) 로 변경되도록 수정하고, DoConversion Function을 통해서 변환해보면 된다. 코드는 상위 image에 나온 것이 전부이니.. 굳이

        CString str = "가나다abc" ;

 

        BYTE pbyte[100] ;

        memset(pbyte, '\0', 100) ;

        UINT s_b= str.GetLength () ;

        //s_b = 2*s_b+1 ;

        CopyMemory( pbyte, str.GetBuffer (s_b), s_b);

 

        IMultiLanguage2 *m = NULL ;

        IMLangConvertCharset* m_pMLCC = NULL;

        char d[1024] ;

 

        memset(d, 0x0, sizeof(d)) ;

 

HRESULT hr = CoCreateInstance(CLSID_CMultiLanguage, NULL,

        CLSCTX_INPROC_SERVER,

               IID_IMultiLanguage2, (void**) &m );

 

        //hr = m->CreateConvertCharset (1200, 20949, 0, &m_pMLCC) ;

        hr = m->CreateConvertCharset (20949, 1200, 0, &m_pMLCC) ;

       

        s_b = s_b*2+1 ;

        m_pMLCC->DoConversion (pbyte, &s_b, (BYTE*)d, &s_b) ;

by 강세윤 | 2009/09/18 13:48 | 정리되지 않은 기술 | 트랙백 | 덧글(1)
트랙백 주소 : http://byung.egloos.com/tb/5116502
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김명신 at 2009/09/24 18:04
ATL이나 MFC를 이용하여 conversion을 수행하고 싶다면
ATL and MFC String Conversion Macros를 사용하면 더 간단하더군요.
http://msdn.microsoft.com/en-us/library/87zae4a3(VS.80).aspx

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >