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; }