私のコードはWindowsとMacで実行されます。これで、QString :: fromLocal8bit()はWinでは正しく機能しますが、MacではLatin1以外の文字(つまりCJK文字)を処理できません。ソースコードを調べたところ、両方のプラットフォームでQtが次のようにコーデックを初期化することがわかりました。
localeMapper = QTextCodec::codecForName("System");
この関数で実行されるQtは、WinではQWindowsLocalCodecを使用し、MacではQIconvCodecを使用します。好みのシステム言語を「中国語」に設定すると、関数getMacLocaleName()とgetWinLocaleName()が「zh_CH.lproj」と「en_US_POSIX」を別々に返すことがわかりました(qlocale.cpp)。iconvライブラリに何かを設定する必要があると思います。そうすれば、現在のロケールがわかり、QString :: fromLocal8bit()が正しく機能します。誰かが私にすべてのものを正しくする方法とQtコーデックのメカニズムは何ですか?