30

Visual Studio の「文字セット」オプションについて問い合わせがあります。文字セットのオプションは次のとおりです。

  • 設定されていません
  • Unicode 文字セットを使用
  • マルチバイト文字セットを使用する

Character Set の 3 つのオプションの違いを知りたいですか?

また、それらのいずれかを選択すると、英語以外の言語 (RTL 言語など) のサポートに影響しますか?

4

2 に答える 2

32

これは互換性設定であり、Unicode が有効になっていない古いバージョンの Windows 用に記述されたレガシ コードを対象としています。Windows 9x ファミリのバージョンである Windows ME は、広く無視された最後のバージョンでした。「設定しない」または「マルチバイト文字セットを使用する」を選択すると、文字列を引数として受け取るすべての Windows API 関数が、文字char*列をwchar_t*文字列 (API のネイティブ文字列型) に変換する小さな互換性ヘルパー関数に再定義されます。

このようなコードは、デフォルトのシステム コード ページ設定に大きく依存します。コード ページは、フォント グリフを選択する Unicode に 8 ビット文字をマップします。コードを実行するマシンに正しいコード ページがある場合にのみ、プログラムは正しいテキストを生成します。コード ページが一致しない場合、値が 128 以上の文字は正しくレンダリングされません。

最新のコードでは、常に「Unicode 文字セットを使用する」を選択してください。特に、右から左へのレイアウトで言語をサポートする必要があり、開発マシンでアラビア語またはヘブライ語のコード ページが選択されていない場合。std::wstringコードでorを使用wchar_t[]します。実際の RTL レイアウトを取得するにWS_EX_RTLREADINGは、呼び出しでスタイル フラグをオンにする必要がありCreateWindowEx()ます。

于 2012-02-19T15:04:37.373 に答える
14

Hans はすでに質問に答えていますが、これらの設定には奇妙な名前が付いていることがわかりました。(正確には何が設定されていないのでしょうか? また、他の 2 つのオプションが非常に似ているのはなぜですか?) それに関して:

  • ここでの「Unicode」は、特にUCS-2エンコーディングを指す Microsoft の言葉です。これは、Hans によって記述された、コードページに依存しない推奨の方法です。_UNICODE と呼ばれる対応する C++ #define フラグがあります。
  • "Multi-Byte Character Set" (別名 MBCS) は、以前の国際的なテキスト エンコーディング スキームを説明するための Microsoft の公式フレーズです。Hans が説明したように、さまざまな言語を記述するさまざまな MBCS コードページがあります。エンコーディングは、一部またはすべての文字が複数のバイトで表現される可能性があるという点で「マルチバイト」です。(一部のコードページは、UTF-8 に類似した可変長エンコーディングを使用します。) 通常のコードページは、すべての ASCII 文字をそれぞれ 1 バイトとして表します。_MBCS と呼ばれる対応する C++ #define フラグがあります。
  • 「設定されていません」とは、_UNICODE も _MBCS も #defined でコンパイルすることを指しているようです。この場合、Windows は厳密に 1 文字あたり 1 バイトのエンコードで動作します。(この場合も、いくつかの異なるコードページが利用可能です。)

Windows での MBCS と UTF-8 の違いは、これらの問題をさらに詳しく説明しています。

于 2013-05-12T01:11:01.417 に答える