マルチバイトとユニコード

C/C++のユニコード対応で最初にぶち当たる壁、マルチバイトとユニコードについて。

[マルチバイト]
1バイト文字と2バイト文字が混在する文字列表現。
char型

[ユニコード]
全ての文字を2バイト文字とする文字列表現。
wchar_t型(WCHAR)
定数表現は以下の通り。
L”文字列”

マルチバイトとユニコードは実行環境によりかわることが考えられますから、ソースコードを汎用化することが保守性を高めます。
そのために用意されているマクロがあります。

文字型は、
TCHAR (Template Character)
マルチバイト環境 ⇒ char
ユニコード環境 ⇒ wchar_t
文字列型は、
TSTR (Template String)
マルチバイト環境 ⇒ char *
ユニコード環境 ⇒ wchar_t *
文字定数は、
_T(‘文字’) または、_TEXT(‘文字’)
マルチバイト環境 ⇒ ’文字’
ユニコード環境 ⇒ L’文字’
文字列定数は、
_T(“文字列”) または、_TEXT(“文字列”)
マルチバイト環境 ⇒ ”文字列”
ユニコード環境 ⇒ L”文字列”
です。

因みに、明示的に宣言する場合、
マルチバイトは、charやchar *、
ユニコードはwchar_tやwchar_t *、
です。

Windowsプログラミングの定数文字列に使う宣言は、
LPCSTR ⇒ const char*
LPCWSTR ⇒ const wchar_t*
LPCTSTR ⇒ const TCHAR*
です。

慣れるまでは、少々ややこしいかもしれません。

参考サイトは以下の通りです。
ありがとうございました。
_T(“”)マクロについて
Visual C++ Ver6.0のソースを最新のVisual C++でコンパイル 概略

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です