アプリケーションをJava+SwingからC+++Qtに変換しようとしています。ある時点で、私はいくつかのUnicode中間体を扱わなければなりませんでした。Javaでは、これはかなり簡単でした。
private static String[] hiraganaTable = {
"\u3042", "\u3044", "\u3046", "\u3048", "\u304a",
"\u304b", "\u304d", "\u304f", "\u3051", "\u3053",
...
}
... C ++では問題が発生します:
QString hiraganaTable[] = {
"\x30\x42", "\x30\x44", "\x30\x46", "\x30\x48", "\x30\x4a",
"\x30\x4b", "\x30\x4d", "\x30\x4f", "\x30\x51", "\x30\x53",
...
};
次の形式の警告のヒープを取得したため、VS2008では\uを使用できませんでした。
ユニバーサル文字名'\u3042'で表される文字は、現在のコードページ(1250)では表現できません
そして、私を愚かとは言わないでください。私は[ファイル]-> [高度な保存オプション]を使用しようとしましたが、コードページはまったく変更されていないようです。これは既知の問題のようです:Visual C++2008でUTF-8文字列リテラルを作成する方法
私が使用しているテーブルはかなり短いので、Vimといくつかの入門レベルの正規表現マジックの助けを借りて、それを\ x30\x42表記に変換することができました。残念ながら、QStringsはそのような入力から適切に初期化されませんでした。私はすべてを試しました。fromAscii()、fromUtf8()、fromLocal8Bit()、QString(QByteArray)、動作します。次に、BOMなしでU + 3042をファイルに書き込んでから、16進モードで表示しようとすると、実際には「E38182」であることがわかりました。突然、このようなエントリはQString :: fromAscii()で機能するように見えました。ここで、「U+」は「U+ 3042」で正確にどのくらいの意味があるのか疑問に思います(0xE38182-0x3042 = E35140なので、このマジック定数をすべてのUnicode文字に追加したほうがいいでしょうか?)。適切なUTF-8文字列の配列を取得するには、ここからどのように進めればよいですか?