Ich versuche gerade, eine Anwendung von Java + Swing nach C++ + Qt zu konvertieren. An einem Punkt musste ich mich mit einigen Unicode-Zwischenstufen befassen. In Java war das ziemlich einfach:
private static String[] hiraganaTable = {
"\u3042", "\u3044", "\u3046", "\u3048", "\u304a",
"\u304b", "\u304d", "\u304f", "\u3051", "\u3053",
...
}
...während ich in C++ Probleme habe:
QString hiraganaTable[] = {
"\x30\x42", "\x30\x44", "\x30\x46", "\x30\x48", "\x30\x4a",
"\x30\x4b", "\x30\x4d", "\x30\x4f", "\x30\x51", "\x30\x53",
...
};
Ich konnte nicht verwenden \u in VS2008, weil ich einen Haufen von Warnungen der Form bekam:
Zeichen, das durch den Universal-Zeichen-Namen ' \u3042 ' kann in der aktuellen Codepage nicht dargestellt werden (1250)
Und nennen Sie mich nicht dumm, ich habe versucht, Datei->Erweiterte Speicheroptionen zu verwenden, ohne Erfolg, die Codepage schien sich nicht zu ändern. Anscheinend ist das ein bekanntes Problem: Erstellen eines UTF-8-Zeichenfolgenliterals in Visual C++ 2008
Die Tabelle, die ich verwende, ist ziemlich kurz, so dass ich sie mit Hilfe von Vim und etwas einführender regexp-Magie in \x30\x42 Notation. Leider würden die QStrings bei einer solchen Eingabe nicht richtig initialisiert. Ich habe alles ausprobiert. fromAscii(), fromUtf8(), fromLocal8Bit(), QString(QByteArray), das funktioniert. Als ich dann versuchte, U+3042 ohne BOM in eine Datei zu schreiben und sie dann im Hex-Modus anzuschauen, fand ich heraus, dass sie sich tatsächlich als "E3 81 82" . Plötzlich schien ein Eintrag wie dieser zu funktionieren mit QString::fromAscii() . Jetzt frage ich mich, für wie viel genau das "U+" in "U+3042" steht (da 0xE38182 - 0x3042 = E35140, sollte ich vielleicht besser diese magische Konstante zu all meinen Möchtegern-Unicode-Zeichen hinzufügen). Wie sollte ich von hier aus vorgehen, um ein Array von richtigen UTF-8 Zeichenfolgen zu erhalten?