Как я могу распечатать QString, содержащую специальный символ с Python с помощью PYQT?

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

  •  30-09-2019
  •  | 
  •  

Вопрос


Мне не удалось просто распечатать переменную QString, содержащую специальный символ.
Я всегда получаю UnicodeeCodeError:

Кодек ASCII 'не может кодировать символы в положении ....

Вот код, который я пробовал без успеха:

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  

Я также пытался использовать:

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

Мне действительно нужно распечатать переменную QString, а не QbyTearray или другой объект.

Это было полезно?

Решение

Это работает для меня, используя 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()
éé
>>>

Ваши внутренние данные должны быть Unicode, поэтому вы должны использовать u'éé' а не просто 'éé' Как вы говорили в вашем вопросе. Ваш комментарий даже говорит u'éé'.

Обновлять: Извините, но печатаю или str() На Unicode не может быть гарантировано на объектах Unicode, если вы не используете определенную кодировку. Печатные потоки принимают байтовые массивы / BYTESTRIONS, а STR () на объекте Unicode эффективно пытается преобразовать Unicode в байтовый массив / ByteString. Вы не сможете избежать байтовых массивов!

Другие советы

Попробуйте следуйте:

  1. Добавить # -*- coding: utf-8 -*- Волшебный комментарий на прошу вашего сценария (детали здесь)
  2. Используйте объявление строки «U» с константой строки

Ниже приведен пример, который работает для меня

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

Возвращает:

éé

éé

éé

Надеюсь, это поможет, по отношению

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top