Seite 1 von 1
Umlaute - Die Verzweilfung
Verfasst: Mittwoch 8. September 2010, 19:44
von huehnerhose
Hallo!
Ich muss jetzt wirklich einen Thread starten, da ich seit Stunden keine funktionierende Lösung finde:
Meine Umlaute in der GUI werden falsch angezeigt... Es sieht nach einem typischen encoding Problem aus...
Ich habe inzwischen so ziemlich alles was ich gefunden habe drin... also:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4.uic.Compiler.qtproxies import QtCore
QtCore.QTextCodec.setCodecForTr(QtCore.QTextCodec.codecForName("UTF-8"))
QtCore.QTextCodec.setCodecForLocale(QtCore.QTextCodec.codecForName("UTF-8"))
QtCore.QTextCodec.setCodecForCStrings(QtCore.QTextCodec.codecForName("UTF-8"))
Ein print "äöü" funktioniert wunderbar, nur eben in den Qt-Widgets funktioniert es nicht. Meine Dateien sind 100% UTF-8 gespeichert
Code: Alles auswählen
UIClasses$ file -i *
UILagerinformationen.py: text/x-java; charset=utf-8
UILagertabelle.py: text/x-java; charset=utf-8
UIMainView.py: text/x-java; charset=utf-8
UIWiderstand.py: text/x-java; charset=utf-8
Mein System läuft auch auf UTF-8 als Grund (ubuntu)... ich bin echt ratlos...
Danke für jede Hilfe
Re: Umlaute - Die Verzweilfung
Verfasst: Mittwoch 8. September 2010, 19:56
von DaMutz
und so etwas funktioniert?:
Bei mir zeigt es bei folgendem Skript das obere Label falsch an, das untere korrekt:
Code: Alles auswählen
# -*- coding: utf-8 -*-
from PyQt4 import QtGui
class SetSelectionTestDlg(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
layout = QtGui.QVBoxLayout()
label = QtGui.QLabel("äöü")
label_mit_umlaute = QtGui.QLabel(u"äöü")
layout.addWidget(label)
layout.addWidget(label_mit_umlaute)
self.setLayout(layout)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
sstd = SetSelectionTestDlg()
result = sstd.exec_()
Re: Umlaute - Die Verzweilfung
Verfasst: Mittwoch 8. September 2010, 20:12
von huehnerhose
ehmm... ja... wenn ich das "u" davor schreibe funktioniert es
Was genau macht das??? Ich bin gerade sehr verwirrt
Re: Umlaute - Die Verzweilfung
Verfasst: Mittwoch 8. September 2010, 20:17
von cofi
Das macht den String zu einem Unicode Literal.
Genauso wie
ein Unicode-Objekt auswirft. PyQt konvertiert Unicode-Objekte automatisch so, dass sie richtig angezeigt werden. Bei Byte-Strings (ohne `u`) kann man allerdings nicht darauf schliessen, in welcher Kodierung sie vorliegen, also geht das in die Hose.
Re: Umlaute - Die Verzweilfung
Verfasst: Mittwoch 8. September 2010, 20:37
von huehnerhose
Achso ok... soweit erstmal schon vielen Dank!
Dann bleibt nur die Frage ob ich ihn "zwingen" kann davon auszugehen, dass alles was an Byte-Strings da ist utf-8-kodiert ist?
Aber sehe ich das richtig, dass dann Daten, die ich aus einer sqlite DB hole, sofern ich irgendwo bei der DB oder dem Hanlder dafür die Kodierung angeben kann, die Sachen dann auch entsprechend angezeigt werden ohne dass ich sie mit u anzeigen muss?
Re: Umlaute - Die Verzweilfung
Verfasst: Mittwoch 8. September 2010, 21:14
von cofi
Was das erzwingen angeht: Dazu kann ich grad nichts sagen, evtl. muesstest du da mal die PyQt Doku durchgehn.
Ad Sqlite, AFAIK gibt das Unicode-Objekte fuer `TEXT` Felder zurueck. Das `u` gilt nur fuer Literale, also Strings die du direkt in den Quelltext schreibst, sonstige Konvertierung `str->unicode` muss per `str.decode` erfolgen.
Re: Umlaute - Die Verzweilfung
Verfasst: Donnerstag 9. September 2010, 12:52
von Hyperion
Re: Umlaute - Die Verzweilfung
Verfasst: Donnerstag 9. September 2010, 12:53
von lunar
@huehnerhose: Nun, da Du sie kennst, wieso beharrst Du auf Bytestrings, und verwendest nicht einfach Unicode-Literale? Das u vor jeder Zeichenkette bringt Dich schon nicht um, erspart aber all die Gedanken über Kodierungen. Ab Python 2.6 kannst Du zudem mit "from __future__ import unicode_literals" auch dafür sorgen, dass Zeichenkettenliterale ohne "u" ebenfalls als Unicode-Literale interpretiert werden.
Darf man übrigens fragen, wo zum Teufel Du den Import "from PyQt4.uic.Compiler.qtproxies import QtCore" her hast?!
Re: Umlaute - Die Verzweilfung
Verfasst: Donnerstag 9. September 2010, 13:40
von huehnerhose
@lunar: das mit dem u ist vollkommen ok, ich wollte nur sicher gehen, dass ich das Problem nicht mit Eingaben aus der UI habe bzw. mit Daten aus der Datenbank. Und hauptsächlich habe ich gedacht irgendwo Murks an sich drin zu haben und deswegen das Problem überhaupt zu bekommen
Was das "from PyQt4.uic.Compiler.qtproxies import QtCore" angeht... ich benutze seit einger Zeit Eclipse als Entwicklungsumgebung allgemein und fand dann PyDev und das meint dass das ein kluger import wäre... aber ich habe schon an mehreren Stellen jetzt merken müssen, dass PyDev nicht so verlässlich ist wie z.B. die Java-Umgebung von Eclipse. Besonders was Obejektbeschreibungen angeht. Leider finde ich auch die
Reference für PyQt die ich gefunden habe nicht sooo gut, da die Beispiele halt alle die C/C++ Beispiele sind und die Adaption durch mangelnde Kenntnis schwer fällt und ich darin auch teilweise Attribute nicht gefunden habe. (Speziell die clicked Geschichte hat mich da einiges gekostet)
@Hyperion: Den ersten Link hatte ich voher bereits gelesen, aber durch die richtige Konsolenanzeige die Geschichte mit dem u nicht wahrgenommen.