3

wchar_t と utf8 の間で文字列を変換するいくつかの関数をテストしているときに、Visual C++ Express 2008 で次の奇妙な結果に遭遇しました。

std::wcout << L"élève" << std::endl;

「ÚlÞve:」が出力されますが、これは明らかに期待どおりではありません。

これは明らかにバグです。どうしてですか?そのような「機能」をどのように扱うと思いますか?

4

5 に答える 5

12

C++ コンパイラは、コード ファイルで Unicode をサポートしていません。代わりに、これらの文字をエスケープされたバージョンに置き換える必要があります。

これを試して:

std::wcout << L"\x00E9l\x00E8ve" << std::endl;

また、コンソールも Unicode をサポートしている必要があります。

アップデート:

コンソールは Unicode をサポートしていないため、コンソールで目的の出力を生成することはできません。

于 2009-04-06T13:09:24.787 に答える
2

これらの関連する質問と有用な回答を見つけまし た Unicode 文字を表示する Windows コマンド シェルはありますか? ソース ファイルに Unicode 文字列定数を埋め込むにはどうすればよいですか?

于 2009-04-06T13:31:26.387 に答える
1

この質問もご覧になることをお勧めします。一部のコンパイラを使用して実際にUnicode文字をファイルにハードコードする方法を示しています(オプションがMSVCになるかどうかはわかりません)。

于 2009-04-06T13:12:33.423 に答える
1

これは明らかにバグです。それはどうしてですか?

他のオペレーティング システムでは従来の文字エンコーディングが廃止され、UTF-8 に切り替えられましたが、Windows では、「OEM」コード ページ (コマンド プロンプトで使用される) と「ANSI」コード ページ (GUI で使用される) の2 つの従来のエンコーディングが使用されます。

C++ ソース ファイルは ANSI コード ページ 1252 (または 1254、1256、または 1258) ですが、コンソールはそれを OEM コード ページ 850 として解釈しています。

于 2010-08-21T02:25:19.753 に答える
0

IDEとコンパイラはANSIコードページを使用します。コンソールはOEMコードページを使用します。

これらの変換関数で何をしているかも重要です。

于 2009-11-11T08:42:49.277 に答える