Seite 1 von 1
qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 16:09
von dut42
Hallo,
Ich hab da mal ein Problem mit der Darstellung von Umlauten, die sich in einem QString befinden:
Code: Alles auswählen
mein_string = "örtlicher Ähnlichkeitenübergang"
mein_qstring = QtCore.QString("örtlicher Ähnlichkeitenübergang#è")
print(mein_string.decode("utf-8"))
print(mein_qstring.toUtf8())
meinstring = str(QtCore.QString("ä").toUtf8())
print("meinstring {}".format(meinstring))
als Erläuterung:
mein_string wird korrekt dargestellt.
mein_qstring enthält statt der Umlaute kryptische Zeichen.
Warum ist das so? bzw. wie kann ich dafür sorgen, dass diese Sonderzeichen auch korrekt dargestellt werden?
Viele Grüße
d u t
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 16:18
von __deets__
Welche Python-Version?
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 16:56
von __blackjack__
@__deets__: Na Python 2, sonst hätte `mein_string` keine `decode()`-Methode.
@dut42: Fang gar nicht erst mit Python 2 an.
Edit: Ansonsten schau doch einfach mal in der Qt-Dokumention nach. `QString` mit einer Byte-Zeichenkette aufgerufen ist demnach das gleiche wie `QString.fromAscii()`. Und bei der Methode steht dann das der Name etwas irreführend ist, weil die zum Dekodieren das nimmt was mit `QTextCodec::setCodecForCStrings()` gesetzt wurde. Wenn da nichts gesetzt wurde, verhält sich die Methode wie `QString.fromLatin1()`. Die Methode macht was der Name suggeriert. Wenn die Byte-Zeichenkette also nicht Latin-1 kodiert ist, dann gibt's Buchstabensalat.
Lösung: Python 3 verwenden, da sind Zeichenketten Unicode und keine Bytes und die Qt-Anbindung frisst eigentlich überall auch gleich Python-Zeichenketten ohne das man die vorher in explizit in `QString` umwandeln muss.
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 16:58
von __deets__
Pah. Details.
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 17:42
von dut42
__deets__ hat geschrieben: Mittwoch 24. Juli 2019, 16:18
Welche Python-Version?
2.7.und qt4
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 17:48
von dut42
__blackjack__ hat geschrieben: Mittwoch 24. Juli 2019, 16:56
@__deets__: Na Python 2, sonst hätte `mein_string` keine `decode()`-Methode.
@dut42: Fang gar nicht erst mit Python 2 an.
Edit: Ansonsten schau doch einfach mal in der Qt-Dokumention nach. `QString` mit einer Byte-Zeichenkette aufgerufen ist demnach das gleiche wie `QString.fromAscii()`. Und bei der Methode steht dann das der Name etwas irreführend ist, weil die zum Dekodieren das nimmt was mit `QTextCodec::setCodecForCStrings()` gesetzt wurde. Wenn da nichts gesetzt wurde, verhält sich die Methode wie `QString.fromLatin1()`. Die Methode macht was der Name suggeriert. Wenn die Byte-Zeichenkette also nicht Latin-1 kodiert ist, dann gibt's Buchstabensalat.
Lösung: Python 3 verwenden, da sind Zeichenketten Unicode und keine Bytes und die Qt-Anbindung frisst eigentlich überall auch gleich Python-Zeichenketten ohne das man die vorher in explizit in `QString` umwandeln muss.
Leider habe ich sehr viel Code "geerbt" und wollte nicht alles von Grund auf neu machen bzw. Anfassen müssen, daher wollte ich bei python 2 für die Geschichte bleiben.
Setcodeforcstrings - - > da müsste ich dann utf8 einstellen?
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 17:54
von dut42
Quark also explizit "latin-1" setzen.... Es ist warm sorry
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 17:57
von Sirius3
Du mußt nur unicode-Strings benutzen.
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 24. Juli 2019, 19:41
von __blackjack__
Und über das mit Python 3 noch mal überlegen weil:
https://pythonclock.org/
Qt4 ist auch nicht mehr wirklich taufrisch. Der Umstieg von Qt4 auf Qt5 ist nicht so schwer.
Bei Python kann man mit Hilfe von `six` oder `future` auch erst einmal einen Zwischenschritt einlegen der dann unter beiden Versionen läuft, wenn man keinen harten Schnitt machen will. Obwohl es dafür eigentlich schon ein bisschen spät ist.
Re: qt4 QString Probleme mit Darstellung von Umlauten
Verfasst: Mittwoch 31. Juli 2019, 08:35
von Kirikkayis
Hey,
hatte das selbe Problem nur wars bei mir Qt5
Versuch doch mal bitte folgendes:
Code: Alles auswählen
mein_string = trUtf8("örtlicher Ähnlichkeitenübergang");
Bei mir hat das mit dem
.decode("utf-8")
auch nicht funktioniert.
Die obere Methode funktioniert bei mir, zumindest in Qt5.