マルチバイト文字セット (MBCS) のサポート
マルチバイト文字セット (MBCS: Multibyte Character Set) は、Unicode の代わりとして、日本語や中国語など、1 バイト文字では表現できない文字セットをサポートします。 国際市場向けのプログラムを作成する場合は、Unicode か MBCS を使うか、スイッチを切り替えてプログラムをビルドできるように配慮します。
最も一般的な MBCS の実装は、2 バイト文字セット (DBCS: Double-Byte Character Set) です。 Visual C++ と MFC では、DBCS に完全に対応しています。
サンプルについては、MFC ソース コード ファイルを参照してください。
大きな文字セットを採用している市場に対応したプラットフォームでは、Unicode の代わりとしては MBCS がまず考えられます。 MFC では、国際化に対応できるデータ型と C ランタイム関数を使用することにより MBCS をサポートしています。 プログラム コードでもこれらを使用するようにしてください。
MBCS では、1 バイトまたは 2 バイトのいずれかで文字がエンコードされます。 2 バイト文字では、最初にくる先頭バイトとその後ろに続くバイトの両方で 1 つの文字と解釈されるようになっています。 この最初のバイトは、先行バイト用に予約されている範囲の値をとります。 バイトのどの範囲が先行バイトとなるかは、使用するコード ページによって異なります。 たとえば、日本語のコード ページ 932 では 0x81 から 0x9F までの範囲を先行バイトとして使いますが、韓国語のコード ページ 949 では別の範囲を使っています。
MBCS のプログラミングでは、次の点について考慮する必要があります。
環境で使われる MBCS 文字
MBCS 文字は、ファイル名やフォルダー名などの文字列に使用できます。編集操作
MBCS アプリケーションでの編集操作は、バイトではなく文字に対して行う必要があります。 カレットで文字を分割しないでください。右方向キーでは、右へ 1 文字移動します。 "削除" は 1 文字を削除すべきで、また "元に戻す" (Undo) は 1 文字を挿入し直すように機能する必要があります。文字列操作
MBCS を使うアプリケーションでは、文字列操作で特殊な問題が出てきます。 1 つの文字列の中に 1 バイト幅の文字と 2 バイト幅の文字が混在しているため、先頭バイトがあるかどうかを必ず確認する必要があります。ランタイム ライブラリのサポート
C のランタイム ライブラリおよび MFC は、1 バイト文字、MBCS、および Unicode でのプログラミングをそれぞれサポートしています。 1 バイトの文字列は、str ファミリのランタイム関数で処理します。MBCS 文字列は、対応する _mbs 関数で処理し、また Unicode 文字列は、対応する wcs 関数で処理します。 MFC クラスのメンバー関数では、状況に応じて、通常の str ファミリの関数、MBCS の関数、または Unicode の関数に割り当てる移植性の高いランタイム関数を使用しています。MBCS と Unicode の移植性
Tchar.h ヘッダー ファイルを使用することにより、同じソースから 1 バイト、MBCS、および Unicode の各アプリケーションをビルドできます。 Tchar.h では、_tcs プレフィックスが付いたマクロが定義されており、状況に応じて、str、_mbs、または wcs のいずれかの関数に割り当てます。 MBCS をビルドするには、シンボル _MBCS を定義します。 Unicode をビルドするには、シンボル _UNICODE を定義します。 MFC アプリケーションでは、既定として、_MBCS が定義されています。 詳細については、「Tchar.h における汎用テキストのマッピング」を参照してください。
注意
_UNICODE と _MBCS の両方を定義すると、動作は正しく定義されなくなります。
Mbctype.h ヘッダー ファイルおよび Mbstring.h ヘッダー ファイルでは、MBCS 固有の関数とマクロが定義されています。この関数とマクロは状況に応じて必要になります。 たとえば _ismbblead は、文字列の特定のバイトが先行バイトかどうかを示します。
多言語間での移植性を持たせるには、プログラムを Unicode またはマルチバイト文字セット (MBCS) でコーディングします。