学習目的で Windows 用のゲームを開発しています (DirectX を学習しています)。UTF対応にしてほしいです。
この質問を読んwchar_t
で、windowsが UTF-16 を使用していることを知りました。ゲームで Lua スクリプトをサポートしたいのですが、Lua は Unicode があまり好きではありません。単に文字列を「バイトのストリーム」として扱います。これは UTF-8 では十分に機能しますが、UTF-16 を使用することは事実上不可能です。
簡単に言うと、windows は UTF-16 を必要とし、lua は UTF-8 を必要とします。
char*
だから私は思った、UTF-8を通常と一緒に使いましょうstring
!.length()
めちゃくちゃになりますが、誰が気にしますか?ただし、機能しません:
const char test_utf8[] = { 111, 108, 0xc3, 0xa9, 0 }; // UTF-8 for olè
mFont->DrawTextA(0, test_utf8, -1, &R, DT_NOCLIP, BLACK);
/* DrawText is a Direct3d function to, well, draw text.
* It's like MessageBox: it is a define to either DrawTextA
* or DrawTextW, depending if unicode is defined or not. Here
* we will use DrawTextA, since we are passing a normal char*. */
これは印刷されolé
ます。つまり、UTF-8 ではなくISO-8859-1を使用しているように見えます。
それで、なにかお手伝いできますか?次のことが考えられます。
- UTF の概念を放棄します。ISO-8859-1 を使用して満足してください (これは World of Warcraft が行うことです。少なくとも enUS バージョンではそうです)。
- すべての単一フレームですべての単一文字列を UTF-8 から UTF-16 に変換します (ただし、各文字列に対して 1 秒間に 60 回以上実行され、O(N) であることを考えると、パフォーマンスの問題が心配です)確かにかなり遅くなります)
- lua 文字列ごとに UTF-16 のコピーを保持します。大量のメモリの浪費、実装が非常に困難 (Lua で変更されたときに UTF-16 文字列を最新の状態に保つなど)