Qstring und deutsche Umlauts
Frage
Ich arbeite mit C ++ und QT und habe ein Problem mit deutschen Umlauts. Ich habe ein Qstring wie "Wirinnen Müde" und möchte ihn in "Wirin Müde" ändern, um es in einem QtextBrowser richtig zu zeigen.
Ich habe versucht, es so zu machen:
s = s.replace( QChar('ü'), QString("ü"));
Aber es funktioniert nicht.
Ebenfalls
s = s.replace( QChar('\u00fc'), QString("ü"))
funktioniert nicht.
Wenn ich alle Zeichen der Zeichenfolge in einer Schleife durchträgt, sind die 'ü' zwei Zeichen.
Kann mir jemand helfen?
Lösung
QStrings sind UTF-16.
QString speichert eine Reihe von 16-Bit-QChars, wobei jedes QCHAR ein Unicode 4.0-Zeichen entspricht. (Unicode -Zeichen mit Codewerten über 65535 werden unter Verwendung von Ersatzpaaren, dh zwei aufeinanderfolgenden QChars, gespeichert.)
Also versuche
//if ü is utf-16, see your fileencoding to know this
s.replace("ü", "ü")
//if ü if you are inputting it from an editor in latin1 mode
s.replace(QString::fromLatin1("ü"), "ü");
s.replace(QString::fromUtf8("ü"), "ü"); //there are a bunch of others, just make sure to select the correct one
Andere Tipps
Es gibt zwei verschiedene Darstellungen von ü
in Unicode:
- Der einzelne Punkt
00FC
(Lateinischer kleiner Buchstaben U mit Diaeresis) - Die Sequenz
0075
(Lateinischer kleiner Buchstabe u)0308
(Kombination Diaeresis)
Sie sollten nach beidem suchen.