Wie kann ich ein QString drucken Sie ein Sonderzeichen mit Python mit PyQt enthalten?

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

  •  30-09-2019
  •  | 
  •  

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.

War es hilfreich?

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:

  1. Add # -*- coding: utf-8 -*- Magie Kommentar am Betteln des Skriptes (Details hier )
  2. 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top