Windows 7 64 ビットで Microsoft Visual Studio 2010 を使用しています。(プロジェクトのプロパティで「文字セット」が「未設定」に設定されていますが、どの設定でも同じ出力になります。)
ソースコード:
using namespace std;
char const charTest[] = "árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP\n";
cout << charTest;
printf(charTest);
if(set_codepage()) // SetConsoleOutputCP(CP_UTF8); // *1
cerr << "DEBUG: set_codepage(): OK" << endl;
else
cerr << "DEBUG: set_codepage(): FAIL" << endl;
cout << charTest;
printf(charTest);
*1: 含めるwindows.h
とめちゃくちゃなので、別の cpp から含めています。
コンパイルされたバイナリには、文字列が正しい UTF-8 バイト シーケンスとして含まれています。を使用してコンソールを UTF-8 に設定するchcp 65001
とtype main.cpp
、文字列が正しく表示されます。
テスト (Lucida Console フォントを使用するように設定されたコンソール):
D:\dev\user\geometry\Debug>chcp
Active code page: 852
D:\dev\user\geometry\Debug>listProcessing.exe
├írv├şzt┼▒r┼Ĺ t├╝k├Ârf├║r├│g├ęp ├üRV├ŹZT┼░R┼É T├ťK├ľRF├ÜR├ôG├ëP
├írv├şzt┼▒r┼Ĺ t├╝k├Ârf├║r├│g├ęp ├üRV├ŹZT┼░R┼É T├ťK├ľRF├ÜR├ôG├ëP
DEBUG: set_codepage(): OK
��rv��zt��r�� t��k��rf��r��g��p ��RV��ZT��R�� T��K��RF��R��G��P
árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP
その背後にある説明は何ですか?cout
として働くように頼むことはできますprintf
か?
添付ファイル
多くの人が、Windows コンソールは UTF-8 文字をまったくサポートしていないと言っています。私はハンガリー在住のハンガリー人です。私の Windows は英語に設定されています (日付形式以外はハンガリー語に設定されています)。ハンガリー語の文字の横にキリル文字が正しく表示されます。
(私のデフォルトのコンソールコードページは CP852 です)