Windowsでコンソールアプリケーションを作成した際に、wprintfやwcoutでユニコードを表示させても標準出力に何も表示されません。 表示させるようにする為には、setlocale()関数に"LC_CTYPE", ""を指定して呼び出すと、ユニコードの日本語の文字列も標準出力に表示されるようになります。(Visual Studio 2008)
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <locale.h> int _tmain ( int argc , _TCHAR* argv[] ) { /* ロケールを日本に設定 これを設定するだけで、標準出力に日本語が表示される ようになります。 */ setlocale( LC_ALL, "Japanese" ); // 文字列 std::wstring str = L"あいうえお¥n"; // 標準出力へ出力する std::wcout << str << std::endl; // 正常終了 return( 0 ); }
あいうえお
Visual Studio 2015の場合は、setlocale(LC_CTYPE,"")を行うことで、wprintfでユニコードが表示されるようになりますが、 std::coutでShift-JISコードが出なくなります。wcoutでユニコードを表示する為には、wcoutのimbueを呼び出す必要があります。
現在のところ、printf, wprintf, cout, wcoutの全てのケースでユニコードを表示可能にする方法が見つけられていません。 (ご存じの方がいらっしゃいましたら、ご教授ください)
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <locale.h> int _tmain ( int argc , _TCHAR* argv[] ) { // ロケール変更 std::wcout.imbue( std::locale( "", std::locale::ctype ) ); // printf printf("printf -> 日本語でた。"); printf("¥n"); // wprintf wprintf(L"wprintf -> 日本語でた。"); printf("¥n"); // cout std::cout << "cout -> 日本語でた。"; printf("¥n"); // wcout std::wcout << L"wcout -> 日本語でた。"; printf("¥n"); // 文字列 std::wstring str = L"あいうえお¥n"; // 標準出力へ出力する std::wcout << str << std::endl; // 正常終了 return( 0 ); }
printf -> 日本語でた。 wprintf -> cout -> 日本語でた。 wcout -> 日本語でた。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <locale.h> int _tmain ( int argc , _TCHAR* argv[] ) { // ロケール変更 setlocale( LC_CTYPE, "" ); std::wcout.imbue( std::locale( "", std::locale::ctype ) ); // printf printf("printf -> 日本語でた。"); printf("¥n"); // wprintf wprintf(L"wprintf -> 日本語でた。"); printf("¥n"); // cout std::cout << "cout -> 日本語でた。"; printf("¥n"); // wcout std::wcout << L"wcout -> 日本語でた。"; printf("¥n"); // 正常終了 return( 0 ); }
printf -> 日本語でた。 wprintf -> 日本語でた。 cout -> wcout -> 日本語でた。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <locale.h> int _tmain ( int argc , _TCHAR* argv[] ) { // ロケール変更 setlocale( LC_CTYPE, "" ); // printf printf("printf -> 日本語でた。"); printf("¥n"); // wprintf wprintf(L"wprintf -> 日本語でた。"); printf("¥n"); // cout std::cout << "cout -> 日本語でた。"; printf("¥n"); // wcout std::wcout << L"wcout -> 日本語でた。"; printf("¥n"); // 正常終了 return( 0 ); }
printf -> 日本語でた。 wprintf -> 日本語でた。 cout -> wcout ->
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <locale.h> int _tmain ( int argc , _TCHAR* argv[] ) { // printf printf("printf -> 日本語でた。"); printf("¥n"); // wprintf wprintf(L"wprintf -> 日本語でた。"); printf("¥n"); // cout std::cout << "cout -> 日本語でた。"; printf("¥n"); // wcout std::wcout << L"wcout -> 日本語でた。"; printf("¥n"); // 正常終了 return( 0 ); }
printf -> 日本語でた。 wprintf -> cout -> 日本語でた。 wcout ->