Come posso stampare un QString contenente un carattere speciale con Python usando PyQt?
Domanda
Io non sono riuscito a stampare semplicemente una variabile QString contenente un carattere speciale.
Ho sempre un'UnicodeEncodeError:
'ascii' codec non può codificare i caratteri in posizione ....
Ecco il codice che ho provato senza successo:
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
Inoltre ho provato ad usare:
QTextCodec.setCodecForCStrings(QTextCodec.codecForName("UTF-8"))
ho davvero bisogno di stampare una variabile QString, non un QByteArray o un altro oggetto.
Soluzione
Si lavora per me usando 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()
éé
>>>
I tuoi dati interni dovrebbe essere Unicode, quindi si dovrebbe utilizzare u'éé'
piuttosto che solo 'éé'
come avete dichiarato nel vostro nella sua interrogazione. Il tuo commento dice anche u'éé'
.
Aggiornamento: Ci dispiace, ma la stampa o str()
su Unicode non può essere garantito il funzionamento su oggetti Unicode a meno che non si utilizza una codifica specifica. flussi di stampa accettano array di byte / stringhe di byte, e str () su un oggetto Unicode è effettivamente tentando di convertire Unicode ad un array di byte / bytestring. Non sta andando ad essere in grado di evitare array di byte!
Altri suggerimenti
provare seguente:
- add
# -*- coding: utf-8 -*-
magia commento a chiedere l'elemosina dello script (dettagli qui ) - Usa "U" dichiarazione stringa con il vostro costante stringa
sotto è un esempio che funziona per me
# -*- 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
restituisce:
éé
éé
éé
Spero che questo aiuti, saluti