Come posso stampare un QString contenente un carattere speciale con Python usando PyQt?

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

  •  30-09-2019
  •  | 
  •  

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.

È stato utile?

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:

  1. add # -*- coding: utf-8 -*- magia commento a chiedere l'elemosina dello script (dettagli qui )
  2. 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top