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 バイトをバックアップするだけでは、前のバイトがリード バイトであるかどうかを確認することはできません。これは、そのバイト値がリード バイトとトレール バイトの両方として使用される可能性があるためです。 したがって、アプリケーションには、可能な円記号と本質的に同じ問題があります。 つまり、部分文字列検索は、SBCSs または Unicode よりも DBCS の方がはるかに複雑です。 したがって、DBCS をサポートするアプリケーションでは、StrStr 関数ではなく、_mbsstrなどの特殊な関数を使用する必要があります。

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

文字セット

1 バイト文字セット