文字コード、されど文字コード。
今日は先週のお仕事について、書かせていただきます。
今、ATLで文字列処理をしています。
ATLとはActive Template Library の略でC++クラスのライブラリの一種です。
先週は週の半分以上、文字コードと格闘していました。
Web関連のアプリでは避けては通れない問題ですね。
Shift-JIS⇔UTF-16とか、UTF-16⇔UTF-8間の変換ですね。
きっと、phpとかなら簡単なんだろうな~と思いつつ、Visual C++で格闘してました。
UTF-8のファイルをバイナリモードでファイルポインタで読んだら、改行コードが見つからなかったり、
CString::GetLength()はバイト数を返すのか文字数を返すのかで悩んだりしてました。
今更ながら、C言語の文字列について悩んでました。
意外と大変なのが、CString⇔char*とかですね。
それもこれも、すべてUNICODEビルドの所為です。
結局今回は、時間的に難しいのであきらめました。
諦めたとたんにサクサク進みました。
とても悔しいです。
まってろよ~!UNICODEビルドめ~。いつか復讐してやる。
ということで覚書:
LPSTR = char*
LPCSTR = const char*
LPWSTR = WCHAR*
LPCWSTR = const WCHAR*
LPTSTR = TCHAR*
LPCTSTR = const TCHAR*
つまり
LP→ポインタ
C→const
TSTR→TCHAR
WSTR→WCHAR
STR→char
そして、TCHARはUNICODEでも通常ビルドでも使えて便利です。
ということで。