【问题标题】:How can I print a QString containing a special character with python using PyQt?如何使用 PyQt 使用 python 打印包含特殊字符的 QString?
【发布时间】:2011-01-07 13:58:11
【问题描述】:


我没有设法简单地打印一个包含特殊字符的 QString 变量。
我总是得到一个 UnicodeEncodeError:

'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 或其他对象。

【问题讨论】:

  • 您要打印到哪里?如果你是例如使用纯 ascii 终端,您无法显示非 ascii 字符 - 这与 QString 无关。可以print var1吗?
  • 是的,我可以打印 var1。我只是尝试在运行 python 解释器的 cmd 提示符内打印。我还尝试在 Eclipse 环境控制台中打印,结果相同。我尝试在 Windows 和 Linux 上使用 Python 2.5 和 python 2.7。
  • 即使转换 str(var2) 也会出现同样的错误(仅当 var1 然后 var2 包含特殊字符时)

标签: python pyqt qstring


【解决方案1】:

它适用于我使用 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'éé'

更新:抱歉,除非您使用特定的编码,否则无法保证在 Unicode 上打印或 str() 可以在 Unicode 对象上工作。打印流接受字节数组/字节串,并且 Unicode 对象上的 str() 有效地尝试将 Unicode 转换为字节数组/字节串。你将无法避免字节数组!

【讨论】:

  • qs.toUtf8() 返回一个 QByteArray 这不是我需要的。我真的只需要打印一个包含特殊字符的 QString 或者用 str() 转换它。不过还是谢谢你的回答
【解决方案2】:

尝试以下:

  1. 在脚本请求处添加# -*- coding: utf-8 -*-魔术评论(详情here
  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

返回:

éé

éé

éé

希望这会有所帮助,问候

【讨论】:

  • 我需要通过一个 QString。所有其他方法,使用 unicode、直接转换、不同的编码......似乎都可以工作,但直接使用 QString 不行。当 QString 变量包含特殊字符时,没有办法只做 str(QString 变量)...
  • 我已经稍微改变了我的例子,看看它是否对你有帮助
  • 它不适用于 python2.7。我有一个错误说: SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xe9 in position 0: unexpected end of data on the line var1 = u"éé"
猜你喜欢
  • 2017-01-26
  • 2014-07-27
  • 2013-08-27
  • 1970-01-01
  • 2013-08-12
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多