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.