UNICODE化と呼んでいいか解らないけど、なにをどうすればできるのかも解らないのでまとめてみるページ
- メリット
- デメリット
- 95・98・Meが(もしかしたらNT4も?)サポートされなくなる
- どこを修正して、どこを修正しなくていいのか調べる
- MBCS 用のコードを排除
- #define UNICODE することで動かなくなる(ANSI API でないといけない)ところを修正する
- ttl の UNICODE? UTF8? 対応
- 9x/NT4 用に MBCS 版を残す?
- UNICODE のターゲットを追加して、#ifdef UNICODE で切り分けて MBCS のバイナリも吐けるようにソースを書く?
- バイナリはインストーラで切り替え?
- ソースコードの管理をどうするか。
- ブランチを切り、2本立てとする。
- ソースコードの一本化
開発方針
- Microsoftの方針に従うと、TCHAR化が必要だが、今から全ソースコードを書き換えるのは現実的ではない。
- まずは、ターミナルバッファのみのTCHAR化を考える。
- リモートホストからの受信(UTF8) -> Unicode(UTF16LE)へ変換 -> バッファ格納 -> Unicodeとして表示
- クライアントからのキー入力 -> UTF8へ変換 -> リモートホストへ送信
- クライアントからのIME入力 -> UTF8へ変換 -> リモートホストへ送信
他アプリでの実装
- PuTTYでは、直接 wchar_t や ワイド関数を使っている。
- サクラエディタでは、条件文(#ifdef _UNICODE)で処理を分けている。
- RLoginでは、文字コード変換はICONV任せ。
コーディングメモ
- WinMain() -> _tWinMain() に置換する。
- char -> TCHAR に置換する。
- LPSTR -> LPTSTR, LPCSTR -> LPCTSTR に置換する。
- 文字列リテラルには、すべて TEXT or _T マクロで囲む。
- "foo" -> TEXT("foo")
- "foo" -> _T("foo")
- 文字列操作関数も TCHAR 版を使う。
- IME入力
関連チケット