Wie kann ich ein QString drucken Sie ein Sonderzeichen mit Python mit PyQt enthalten?
Frage
Ich weiß nicht, einfach drucken Sie eine QString Variable, die einen besonderen Charakter verwaltet.
Ich bekomme immer eine UnicodeEncodeError:
'ascii' Codec kann nicht codieren Zeichen in Position ....
Hier ist der Code, den ich ohne Erfolg versucht:
var1 = "éé" #idem with u"éé"
var2 = QString (var1)
print var2
--->>> UnicodeEncodeError
print str(var2)
--->>> UnicodeEncoreError
var3 = QString.fromLocal8Bit (var1) #idem with fromLatin1 and fromUtf8
print var3
--->>> UnicodeEncodeError
codec = QTextCodec.codecForName ("UTF-8") #idem with ISO 8859-1
var4 = codec.toUnicode (var2.toUtf8().data()) #idem with toLatin1 instead of toUtf8
print var4
--->>> UnicodeEncodeError
ich auch Gebrauch versucht:
QTextCodec.setCodecForCStrings(QTextCodec.codecForName("UTF-8"))
Ich brauche wirklich eine QString Variable zu drucken, kein QByteArray oder ein anderes Objekt.
Lösung
Es funktioniert für mich mit toUtf8()
:
>>> s = u'éé'
>>> qs = QString(s)
>>> qs
PyQt4.QtCore.QString(u'\xe9\xe9')
>>> print qs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> print qs.toUtf8()
éé
>>>
Ihre internen Daten sollten Unicode, so dass Sie u'éé'
anstatt nur 'éé'
verwenden sollten, wie Sie in Ihrem in Ihrer Frage angegeben. Ihr Kommentar selbst sagt u'éé'
.
Update: Es tut uns Leid, aber das Drucken oder str()
auf Unicode kann nicht garantiert werden, auf Unicode-Objekte, wenn Sie eine bestimmte Codierung verwenden. Druckdatenströme annehmen Bytefeldgruppen / bytestrings und str () für ein Unicode-Objekt versucht, effektiv Unicode zu einer Byte-Array zu konvertieren / bytestring. Du wirst in der Lage sein, um nicht Byte-Arrays zu vermeiden!
Andere Tipps
versuchen folgt:
- Add
# -*- coding: utf-8 -*-
Magie Kommentar am Betteln des Skriptes (Details hier ) - Verwendung "u" string Erklärung mit String-Konstante
unten ist ein Beispiel, das funktioniert für mich
# -*- coding: utf-8 -*-
from PyQt4 import QtCore
var1 = u"éé" #idem with u"éé"
print var1
var2 = QtCore.QString(var1)
print var2
var3 = QtCore.QString(u"éé")
print var3
Rückgabe:
éé
éé
éé
hoffe, das hilft, Grüße