役に立ちそうもないTips移転版

俺得なTipsを書き連ねるだけのブログ。

IrrlichtのIO周りとUnicode

 Irrlichtはファイルシステム(というか具体的にはファイルパス)のエンコーディングがcharでもwchar_tでも対応できるように作られてる
……はずだと思ったが、落とし穴。
 アプリケーション側でirr::fschar_tを決めれば同一のDLL(lib)でANSI/UNICODE対応できるかと思ったが、実装のいくつかの箇所(たとえばCFileSystem::getAbsolutePath() )に#ifdefで処理切り分けてるとこがあって、ライブラリのコンパイル時に一方に固定されてしまう。
 なお、Ver 1.8.1の時点では公式配布のコンパイル済みバイナリではANSI側(_IRR_WCHAR_FILESYSTEMが未定義)でコンパイルされてる模様。
 ……何が困るかとゆーと、
・コンフィグファイルをUTF-8XMLで書いてて
・そこに日本語の混じったファイルパス書いちゃってて、
・じゃあファイルシステムエンコーディングUNICODEにすればあんまし変換の手間なくいけるか、
とか思ったらだめでしたという話orz
 効率はよろしくないが、そこ実行時切り替えにしてもらえんかなあ……あるいはstringc / stringw みたく両方インスタンス化しといて頂けるか。
 まあUTF-8→UTF-16LE→CP932と持ってくればいけるのだけど、変換ロス怖いでしょう……orz

というか、UTF-16ベースでファイルシステムの名前管理してる(一方で普段表に見えてるのはANSI/OEMコードページ)なんてWindowsくらいかorz