C言語でUNICODEを扱う

ただ、wprintf()で表示しようとしても、コンソールに文字列が表示されない。setlocale()関数などを使って、UNICODEを扱えるようにする必要がある。

#include <stdio.h>
#include <locale.h>

int
main()
{
	char *loc = setlocale(LC_CTYPE, "");
	printf("%s\n", loc);

	setlocale(LC_ALL, loc);
	wprintf(L"Hello World!\n");

	return 0;
}

/////////////////////////////////
//結果(Windows XPで実行, Visual Studio 2005でビルド)
Japanese_Japan.932
Hello World!



マルチバイト文字列をワイド文字列に変換する
mbstowcs()関数を使う。

#include <stdio.h>
#include <locale.h>

int
main()
{
	char mbs[] = "あいうえお";
	wchar_t wcs[1024];

	setlocale(LC_ALL, setlocale(LC_CTYPE, ""));

	mbstowcs(wcs, mbs, sizeof(wcs)/sizeof(wcs[0]));

	wprintf(L"%s\n", wcs);

	return 0;
}



今度は、逆にワイド文字列からマルチバイト文字列へ変換する
wcstombs()関数を使う。

#include <stdio.h>
#include <locale.h>

int
main()
{
	wchar_t wcs[] = L"あいうえお";
	char mbs[1024];

	setlocale(LC_ALL, setlocale(LC_CTYPE, ""));

	wcstombs(mbs, wcs, sizeof(mbs)/sizeof(mbs[0]));

	printf("%s\n", mbs);

	return 0;
}



C++言語でロケールを扱う(Windows XP, Visual Studio 2005にて)

#include <iostream>
#include <locale>

int
main()
{
	std::wcout.imbue(std::locale(""));
	std::wcout << L"あいうえお";

	return 0;
}



C++言語でロケールを扱う(Fedora Core 5, g++にて)
(参考:http://kishuizon.blog.so-net.ne.jp/2006-11-12-1)

#include <iostream>
#include <locale>

int
main()
{
        std::locale::global(std::locale(""));
        std::wcout << L"あいうえお";

        return 0;
}