2012-02-19 9 views
21

Visual Studio 2010の「文字セット」オプションに関する質問。Visual Studio 2010の「文字セット」オプションについて

文字は
を設定 -
を設定していない - 利用Unicode文字は
を設定 - 使用マルチバイト文字は、私は、「文字セット」の3つのオプションの間にどのような違いを知りたい

を設定します。
また、私がそれらの何かを選択した場合、英語以外の言語のサポートに影響します。 (RTL言語のように)。

答えて

24

互換性の設定です。旧バージョンのWindows用に書かれたレガシーコードで、Unicode対応ではありません。 Windows 9xファミリのWindows MEは、最後に広く無視されていました。 "Not Set"または "Use Multi Byte Character Set"を選択すると、文字列を引数として取るすべてのWindows API関数は、char*文字列をwchar_t*文字列に変換する小さな互換ヘルパー関数に再定義されます。

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

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

9

ハンスは既にこの質問に答えていますが、これらの設定では不思議な名前があることがわかりました。 (正確には何を設定し、なぜ他の2つのオプションはとても似て聞こえるされていない?)ことについて:

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

Difference between MBCS and UTF-8 on Windowsは、これらの問題にもっと詳しく関わっています。

+0

UPC-8のサポートを追加することを拒否しています。 – MarcusJ