Seite 1 von 1
QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 14:15
von -dude-
Hallo zusammen,
ich versuche im Moment Umlaute in meiner Anwendung benutzbar zu machen. Unter Linux gelingt das auch. Unter WIndows leider nicht. Ich habe das bisher wie folgt umgesetzt (hier beim Auslesen eines ListWidget):
und zu Vergleichszwecken mache ich mit den Strings
Ist das überhaupt vernünftig? Und warum funktioniert das unter Windows nicht?
Danke
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 14:22
von lunar
@-dude-: Wieso kodierst Du die Texte überhaupt?! Arbeite doch einfach mit unicode weiter…
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 14:23
von BlackJack
@-dude-: Was genau funktioniert denn nicht?
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 14:50
von -dude-
Also ich möchte folgendes machen:
Ich lese aus einem QTextEdit einen QString aus und möchte dann eine Datei mit diesem namen öffnen. Also
Code: Alles auswählen
filename = self.textEdit.text()
file = open(filename, "w")
Das gibt mir aber den Fehler (wenn ein Umlaut drin ist)
Code: Alles auswählen
'ascii' codec can't deconicodede byte 0xc3 in position 0: ordinal not in range(128)
Deswegen habe ich einfach alle Strings und QStrings in utf-8 kodiert.
Ich weiß leider nicht wie ich unter WIndows an eine Fehlermeldung komme. Es passiert einfach nichts auch nicht beim ausführen aus der Eingabeaufforderung
Dude
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 15:01
von lunar
@-dude-: Wie kommst Du darauf, Windows würde UTF-8 für Dateinamen verwenden? Selbst unter Linux ist das heute zwar üblich, aber keinesfalls garantiert. Du musst schon die tatsächlich vom System verwendete Kodierung nutzen, welche Du über "sys.getfilesystemencoding()" erhältst.
Wie hast Du das Programm denn in der Eingabeaufforderung gestartet?
Edit: Zur Lösung Deines Programs lies den Beitrag von BlackJack unter meinem. Das ist die richtige Lösung

Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 15:02
von BlackJack
@-dude-: Wandel das `QString`-Exemplar doch einfach per `unicode()` in ein `unicode`-Objekt um. Das sollte bei `open()` funktionieren.
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 15:07
von -dude-
lunar hat geschrieben:@-dude-: Wie kommst Du darauf, Windows würde UTF-8 für Dateinamen verwenden? Selbst unter Linux ist das heute zwar üblich, aber keinesfalls garantiert. Du musst schon die tatsächlich vom System verwendete Kodierung nutzen, welche Du über "sys.getfilesystemencoding()" erhältst.
Okay mein Fehler. Da hatte ich nicht drüber nachgedacht.
Wie hast Du das Programm denn in der Eingabeaufforderung gestartet?[/quote]
Den Pfad zur pythonw in die Umgebungsvariable PATH hinzugefügt und
BlackJack hat geschrieben:@-dude-: Wandel das `QString`-Exemplar doch einfach per `unicode()` in ein `unicode`-Objekt um. Das sollte bei `open()` funktionieren.
Danke das funktioniert. Mal gucken ob das auch in allen anderen Bereichen des Programms die Lösung ist. Melde mich dann nochmal.
Danke und Grüße
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 15:13
von lunar
@-dude-: Verwende "python" (nicht "pythonw"!) zum Starten eines Programms aus der Eingabeaufforderung.
Im Gegensatz zu Linux unterscheidet Windows zwischen graphischen Programmen und Konsolenprogrammen. "pythonw" startet ein Programm als graphisches Programm, und unterdrückt dabei jegliche Konsolenausgabe einschließlich möglicher Fehlermeldungen. "python" dagegen startet das Programm als Konsolenprogramm, so dass Du Konsolenausgaben und Fehlermeldungen sehen kannst.
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Montag 12. März 2012, 15:27
von -dude-
Danke für die Information. Das werde ich beim nächsten mal beherzigen
Re: QString nach UTF-8 kodieren unter Windows
Verfasst: Dienstag 13. März 2012, 04:39
von Leonidas
Was man auch machen kann ist, das Bindung auf die neuere API umstellen so dass überall da wo früher QStrings rausgefallen sind, nun unicode-Strings kommen:
Bevor man PyQt importiert.