¿Cómo puedo imprimir un QString contiene un carácter especial con Python usando PyQt?
Pregunta
No me las arreglé para imprimir simplemente una variable QString contiene un carácter especial.
Siempre tengo un UnicodeEncodeError:
'ascii' codec no puede caracteres codifican en posición ....
Aquí está el código que intentó sin éxito:
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
También trató de usar:
QTextCodec.setCodecForCStrings(QTextCodec.codecForName("UTF-8"))
Es realmente necesario para imprimir una variable QString, no un QByteArray u otro objeto.
Solución
A mí me funciona 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()
éé
>>>
Sus datos internos debe ser Unicode, por lo que debe utilizar u'éé'
en lugar de sólo 'éé'
como ha afirmado en su en su pregunta. Su comentario llega a decir u'éé'
.
Actualización: Lo sentimos, pero la impresión o str()
en Unicode no se puede garantizar que el trabajo sobre objetos Unicode a menos que utilice una codificación específica. flujos de impresión aceptan matrices de bytes / cadenas de bytes, y str () en un objeto Unicode está tratando con eficacia para convertir Unicode a una matriz de bytes / cadena de bytes. No vas a ser capaz de evitar las matrices de bytes!
Otros consejos
seguir los siguientes pasos:
- Comentario del complemento
# -*- coding: utf-8 -*-
magia en el petición de su script (detalles aquí ) - Uso de "U" con su declaración de cadena constante de cadena
a continuación es un ejemplo que funciona para mí
# -*- 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
retornos:
éé
éé
éé
Espero que esta ayuda, respecto