Unicode のサポート
Unicode は、1 バイトでは表現できない文字セットを含むあらゆる文字セットをサポートする仕様です。 国際市場向けにプログラミングする場合は、Unicode かマルチバイト文字セット (MBCS) のいずれかを使用するか、またはスイッチを変更することでプログラムをそのいずれかでビルドできるようにすることをお勧めします。
ワイド文字は、2 バイトの多言語文字コードです。 現代のコンピューティングにおいて世界中で使用されている文字のほとんどは、技術的な記号や特殊な出版用の文字も含め、ワイド文字としての Unicode 仕様に従って表現できます。 1 つのワイド文字では表現できない文字は、Unicode のサロゲート機能を使用して Unicode のペアで表現できます。 それぞれのワイド文字は 16 ビットの固定サイズで表現されるため、ワイド文字を使用すると、各種言語の文字セットを使うプログラミングが簡単になります。
ワイド文字列は wchar_t[] 配列として表現され、wchar_t* ポインターで指し示されます。 ASCII 文字は、先頭に文字 L を付けることで、ワイド文字として表現できます。 たとえば、L'\0' はワイド文字 (16 ビット) の終端の NULL 文字です。 同様に、ASCII 文字列リテラルは、ASCII リテラルの先頭に文字 L を付けることで、ワイド文字列リテラルとして表現できます (L"Hello")。
通常、ワイド文字はマルチバイト文字よりもメモリ内の領域を多く必要としますが、処理は速くなります。 また、マルチバイト エンコードで一度に表現できるロケールは 1 つのみですが、Unicode 表現では世界中のすべての文字セットを同時に表現できます。
MFC フレームワークは Unicode に完全に対応しており、MFC では、次の表に示すように、移植性のあるマクロを使用することで Unicode 対応を実現しています。
MFC での移植性のあるデータ型
移植性のないデータ型 |
置き換えに使うマクロ |
---|---|
char |
_TCHAR |
char*、LPSTR (Win32 データ型) |
LPTSTR |
const char*、LPCSTR (Win32 データ型) |
LPCTSTR |
クラス CString では _TCHAR が基本として使用され、変換を簡単にするためにコンストラクターと演算子が提供されます。 Unicode の文字列操作のほとんどは、操作の基本単位が 8 ビット バイトではなく 16 ビット文字であることを除き、Windows の ANSI 文字セットの操作に使用するのと同じロジックを使用して記述できます。 マルチバイト文字セットの操作と異なり、1 つの Unicode 文字を 2 つの個別のバイトのように扱う必要はなく、また、そのような処理は適切ではありません。