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

解説


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


面倒な変換例


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

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

	//変換したいUnicode文字列
	wcsncpy(pszUnicode,L"ABCあいう",50);

	nLen = ::WideCharToMultiByte(CP_THREAD_ACP, 0, pszUnicode, -1, NULL, 0, NULL, NULL );
	pszMBCS = new char[nLen];
	::WideCharToMultiByte(CP_THREAD_ACP, 0, pszUnicode, wcslen(pszUnicode)+1, pszMBCS, nLen, NULL, NULL );

	//pszMBCSが変換されたMBCS文字列

	delete	pszMBCS;
}



楽な変換例


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


#include "atlstr.h"

void	Test(void)
{
	CAtlStringW	strUnicode
	CAtlStringA	strMBCS

	//変換したいUnicode文字列
	strUnicode = L"ABCあいう";

	//変換
	strMBCS = strUnicode;

	//strMBCSが変換されたMBCS文字列
}

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