MBCS(ANSI)からユニコードへの変換

解説


・MultiByteToWideCharを使って変換するのは面倒だからCAtlStringなどを利用する。


面倒な変換例


普通MBCSからユニコードに変換するにはMultiByteToWideCharを利用する。
しかしコードを見て分かるように非常に面倒。

void	Test(void)
{
	int		nLen;
	char	pszMBCS[50];
	WCHAR*	pszUnicode;

	//変換したいMBCS文字列
	strncpy(pszMBCS,"ABCあいう",50);

	//Unicodeに必要な文字数の取得
	nLen = ::MultiByteToWideChar(CP_THREAD_ACP, 0, pszMBCS, -1, NULL,0);
	pszUnicode = new WCHAR[nLen];

	//変換
	::MultiByteToWideChar(CP_THREAD_ACP, 0, pszMBCS, strlen(pszMBCS)+1, pszUnicode, nLen);


	//pszUnicodeが変換されたユニコード文字列

	delete	pszUnicode;
}



楽な変換例


邪道っぽいがCAtlStringやCStringを利用すると楽に変換可能。
これらのクラス内部ではMultiByteToWideCharを呼び出して変換している。


#include "atlstr.h"

void	Test(void)
{
	CAtlStringA	strMBCS
	CAtlStringW	strUnicode

	//変換したいMBCS文字列
	strMBCS = "ABCあいう";

	//変換
	strUnicode = strMBCS;

	//strUnicodeが変換されたユニコード文字列
}

カテゴリー「VC++ TIPS」 のエントリー