英語で読む

次の方法で共有


2 バイト文字セット

"拡張 8 ビット文字セット" とも呼ばれる 2 バイト文字セット (DBCS) は、コード ページとして実装される拡張 1 バイト文字セット (SBCS) です。 DBCS はもともと、日本語や中国語などの言語を処理するために SBCS 設計を拡張するために開発されました。 DBCS の一部の文字 (英語の書き込みに使用される数字や文字など) には、1 バイトのコード値があります。 中国語のイデオログラフや日本語の漢字などの他の文字には、2 バイトのコード値があります。 DBCS は、Windows コード ページまたは OEM コード ページに対応できます。 DBCS コード・ページには、EBCDIC コード・ページなどの非ネイティブ・コード・ページを含めることもできます。 これらのコード ページの定義については、「コード ページの」を参照してください。

注意

新しい Windows アプリケーションでは、Unicode 使用して、さまざまなコード ページの不整合を回避し、ローカライズを容易にする必要があります。 ただし、一部のレガシ プロトコルでは DBCS コード ページの使用が必要になる場合があります。 各 DBCS コード・ページは異なる文字をサポートしますが、Unicode で提供される文字の完全な幅をサポートするページはありません。 各 DBCS コード ページでは、異なるサブセットがサポートされ、エンコードが異なります。 ある DBCS コード・ページから別の DBCS コード・ページに変換されたデータは、異なるコード・ページ上の同じデータ値が異なる文字をエンコードできるため、破損の可能性があります。 Unicode から DBCS に変換されたデータは、特定のコード ページがその特定の Unicode データで使用されるすべての文字を表すことができるわけではないため、データ損失の可能性があります。

 

DBCS ストリングを解釈するには、アプリケーションはストリングの先頭から開始し、前方スキャンする必要があります。 文字列内でリード バイトが検出されたときに追跡を保持し、次のバイトを同じ文字の末尾の部分として扱います。 アプリケーションが文字列を一度に 1 バイトずつスキャンするだけで、円記号 ("\") を表すコード値と思われるバイトが見られる場合、そのバイトは単に 2 バイト文字の証跡バイトである可能性があります。 アプリケーションは 1 バイトだけをバックアップして、前のバイトがリード バイトであるかどうかを確認することはできません。これは、そのバイト値がリード バイトと証跡バイトの両方として使用される可能性があるためです。 したがって、アプリケーションには、可能なバックスラッシュと本質的に同じ問題があります。 つまり、部分文字列検索は、SBCS または Unicode よりも DBCS の方がはるかに複雑です。 したがって、DBCS をサポートするアプリケーションでは、StrStr 関数の代わりに、_mbsstrなどの特殊な関数を使用する必要があります。

アプリケーションでは、"A" バージョンの Windows 関数で DBCS Windows コード ページを使用します。 「および コード ページの関数プロトタイプの 規則」を参照してください。 DBCS コード・ページを識別するために、アプリケーションは GetCPInfoを使用するか、または GetCPInfoEx関数できます。 アプリケーションは、IsDBCSLeadByte 関数を使用して、指定された値を 2 バイト文字のリード バイトとして使用できるかどうかを判断できます。 さらに、アプリケーションは MultiByteToWideCharを使用し、WideCharToMultiByte関数をして、Unicode 文字列と DBCS 文字列の間でマップできます。

文字セット

1 バイト文字セット