Unicode のサポート
Unicode は、1 バイト文字では表現できない文字セットを含むあらゆる文字セットをサポートします。国際市場向けのプログラムを作成する場合は、Unicode またはマルチバイト文字セット (MBCS: Multibyte Character Set) を使用するか、スイッチを切り替えてプログラムをビルドできるように配慮します。
ワイド文字は、2 バイトの多言語文字コードです。専門分野で使う記号や出版業界で採用している特殊文字なども含めて、世界規模の現代コンピューター業界で使用する文字はほとんど、Unicode 仕様に従えば、ワイド文字として一律に表現できます。ワイド文字 1 文字では表すことができない文字も、Unicode のサロゲート機能を使って Unicode 文字を組み合わせて表すことができます。ワイド文字はすべて 16 ビット幅に固定されているため、ワイド文字を採用すると各国の文字セットを使ったプログラミングが簡単になります。
ワイド文字列は、wchar_t[] 配列で表し、wchar_t* ポインターで参照します。ASCII 文字は、接頭字 L を付け加えることにより、ワイド文字として表すことができます。たとえば、L'\0' はワイド文字 (16 ビット) の終端 NULL 文字です。同様に、ASCII リテラル文字列も、接頭字 L を付け加えることにより、ワイド文字列として表すことができます (例 : L"Hello")。
一般的に、ワイド文字を使用した場合は、マルチバイト文字を使用した場合に比べてメモリ効率は低下しますが、処理速度は向上します。また、マルチバイト文字を使用した場合、一度に表すことのできるロケールは 1 つだけですが、Unicode を使用した場合、世界中の文字セットをすべて同時に使用できます。
MFC のフレームワークは、データベース クラスを除いて、Unicode をサポートしています。ODBC は Unicode に対応していません。MFC では、次の表に示すように、移植性の高いマクロを使うことにより、Unicode に対応できるようになっています。
MFC で移植性のあるデータ型
移植性の低いデータ型 |
置き換えに使うマクロ |
---|---|
char |
_TCHAR |
char*、LPSTR (Win32 データ型) |
LPTSTR |
const char*、LPCSTR (Win32 データ型) |
LPCTSTR |
CString クラスは _TCHAR をベースにしており、コンストラクターと演算子を用意することで変換を簡易化しています。Unicode を使った文字列演算は、演算の基本単位が 8 ビット バイトではなく 16 ビット文字という相違はありますが、Windows の ANSI 文字セットの操作と同じロジックを使って書くことができます。マルチバイト文字セット (MBCS) を使った演算とは異なり、Unicode 文字を単一のバイト ペアとして扱うことができます。また、そのように扱うことが必要です。