4


我没有设法简单地打印一个包含特殊字符的 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 或其他对象。

4

2 回答 2

5

它适用于我使用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 转换为字节数组/字节串。您将无法避免字节数组!

于 2011-01-07T16:45:44.983 回答
1

尝试以下:

  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

返回:

éé

éé

éé

希望这会有所帮助,问候

于 2011-01-08T14:54:19.487 回答