如何使用PYQT打印包含Python特殊字符的QString?
题
我没有设法简单地打印包含特殊字符的QString变量。
我总是得到一个UnicenCodeError:
“ 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对象。打印流接受字节数组/字节段,而Unicode对象上的str()正在有效地试图将Unicode转换为字节数组/bytestring。您将无法避免字节数组!
其他提示
尝试以下内容:
- 添加
# -*- coding: utf-8 -*-
脚本乞讨时的魔术评论(详细信息 这里) - 使用“ 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
返回:
éé
éé
éé
希望这会有所帮助
不隶属于 StackOverflow