Unicode のサポート

Unicode は、1 バイトでは表現できない文字セットを含むあらゆる文字セットをサポートする仕様です。 国際市場向けにプログラミングを行う場合は、Unicode またはマルチバイト文字セット (MBCS) を使用することをお勧めします。 または、スイッチを変更していずれかにビルドできるように、プログラムをコーディングします。

ワイド文字は、2 バイトの多言語文字コードです。 技術記号や特殊な出版用の文字など、現代のコンピューティングにおいて世界中で使用されているほぼすべての文字で構成される数万もの文字は、Unicode 仕様に従って、UTF-16 を使用してエンコードされた単一のワイド文字として表現できます。 1 つのワイド文字では表現できない文字は、Unicode のサロゲート ペア機能を使用して Unicode のペアで表現できます。 一般的に使用されるほぼすべての文字が 1 つの 16 ビットのワイド文字で UTF-16 で表されるので、ワイド文字を使用すると、国際文字セットを使用したプログラミングが簡単になります。 UTF-16LE (リトル エンディアンの場合) を使用してエンコードされたワイド文字は、Windows のネイティブな文字形式です。

ワイド文字列は wchar_t[] 配列として表現され、wchar_t* ポインターで指し示されます。 ASCII 文字は、先頭に文字 L を付けることで、ワイド文字として表現できます。 たとえば、L'\0' はワイド文字 (16 ビット) の終端の NULL 文字です。 同様に、ASCII 文字列リテラルは、ASCII リテラルの先頭に文字 L を付けることで、ワイド文字列リテラルとして表現できます (L"Hello")。

通常、ワイド文字はマルチバイト文字よりもメモリ内の領域を多く必要としますが、処理は速くなります。 また、マルチバイト エンコードで一度に表現できるロケールは 1 つのみですが、Unicode 表現では世界中のすべての文字セットを同時に表現できます。

MFC フレームワークは Unicode に完全に対応しており、MFC では、次の表に示すように、移植性のあるマクロを使用することで Unicode 対応を実現しています。

MFC での移植性のあるデータ型

移植性のないデータ型 置き換えに使うマクロ
char, wchar_t _TCHAR
char*LPSTR (Win32 データ型)、LPWSTR LPTSTR
const char*LPCSTR (Win32 データ型)、LPCWSTR LPCTSTR

クラス CString では _TCHAR が基本として使用され、変換を簡単にするためにコンストラクターと演算子が提供されます。 Unicode の文字列操作のほとんどは、操作の基本単位が 8 ビット バイトではなく 16 ビット文字であることを除き、Windows の ANSI 文字セットの操作に使用するのと同じロジックを使用して記述できます。 マルチバイト文字セットの操作と異なり、1 つの Unicode 文字を 2 つの個別のバイトのように扱う必要はなく、また、そのような処理は適切ではありません。 ただし、1 つの文字がワイド文字のサロゲート ペアで表される可能性に対処する必要があります。 一般に、文字列の長さが、文字列に含まれる文字数 (ナローでもワイドでも) と同じになることが前提となったコードは記述しないようにします。

目的に合ったトピックをクリックしてください

関連項目

テキストと文字列
wmain の使用