QString nach UTF-8 kodieren unter Windows

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
-dude-
User
Beiträge: 16
Registriert: Samstag 25. Februar 2012, 09:43

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):

Code: Alles auswählen

self.listWidget.currentItem().text().toUtf8()
und zu Vergleichszwecken mache ich mit den Strings

Code: Alles auswählen

myString.decode("utf-8")
Ist das überhaupt vernünftig? Und warum funktioniert das unter Windows nicht?

Danke
lunar

@-dude-: Wieso kodierst Du die Texte überhaupt?! Arbeite doch einfach mit unicode weiter…
BlackJack

@-dude-: Was genau funktioniert denn nicht?
-dude-
User
Beiträge: 16
Registriert: Samstag 25. Februar 2012, 09:43

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
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 :)
Zuletzt geändert von lunar am Montag 12. März 2012, 15:06, insgesamt 1-mal geändert.
BlackJack

@-dude-: Wandel das `QString`-Exemplar doch einfach per `unicode()` in ein `unicode`-Objekt um. Das sollte bei `open()` funktionieren.
-dude-
User
Beiträge: 16
Registriert: Samstag 25. Februar 2012, 09:43

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

Code: Alles auswählen

pythonw app.py
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
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.
-dude-
User
Beiträge: 16
Registriert: Samstag 25. Februar 2012, 09:43

Danke für die Information. Das werde ich beim nächsten mal beherzigen
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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:

Code: Alles auswählen

import sip
sip.setapi('QString', 2)
Bevor man PyQt importiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten