¿Cómo puedo imprimir un QString contiene un carácter especial con Python usando PyQt?

StackOverflow https://stackoverflow.com/questions/4626150

  •  30-09-2019
  •  | 
  •  

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.

¿Fue útil?

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:

  1. Comentario del complemento # -*- coding: utf-8 -*- magia en el petición de su script (detalles aquí )
  2. 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top