Comment puis-je imprimer un QString contenant un caractère spécial avec Python en utilisant PyQt?

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

  •  30-09-2019
  •  | 
  •  

Question


Je ne suis pas réussi à imprimer simplement une variable QString contenant un caractère spécial.
Je reçois toujours un UnicodeEncodeError:

  

'ascii' codec ne peut pas Encode les caractères dans la position ....

Voici le code que j'essayé sans succès:

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  

J'ai aussi essayé d'utiliser:

 QTextCodec.setCodecForCStrings(QTextCodec.codecForName("UTF-8"))  

J'ai vraiment besoin d'imprimer une variable QString, pas un QByteArray ou un autre objet.

Était-ce utile?

La solution

Il fonctionne pour moi en utilisant 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()
éé
>>>

Vos données internes doivent être Unicode, vous devez utiliser u'éé' plutôt que 'éé' comme vous l'avez dit dans votre dans votre question. Votre commentaire dit même u'éé'.

Mise à jour: Désolé, mais l'impression ou str() sur Unicode ne peut pas être garantie à travailler sur des objets Unicode sauf si vous utilisez un codage spécifique. les flux d'impression acceptent des tableaux d'octets / str et les chaînes d'octets () sur un objet Unicode tente de convertir efficacement Unicode à un tableau d'octets / bytestring. Tu ne vas pas être en mesure d'éviter des tableaux d'octets!

Autres conseils

essayez ce qui suit:

  1. ajouter un commentaire magique # -*- coding: utf-8 -*- à la mendicité de votre script (détails )
  2. utilisation "u" déclaration de chaîne avec votre constante de chaîne

ci-dessous est un exemple qui fonctionne pour moi

# -*- 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

retours:

  

éé

     

éé

     

éé

espérons que cette aide, ce qui a trait

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top