如何使用PyQt打印包含python的特殊字符的QString?

时间:2011-01-07 13:58:11

标签: python pyqt qstring


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

2 个答案:

答案 0 :(得分: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'éé'

更新:很抱歉,除非您使用特定的编码,否则无法保证在Unicode上打印或str()。打印流接受字节数组/字节串,而Unicode对象上的str()实际上是在尝试将Unicode转换为字节数组/字节串。你无法避免字节数组!

答案 1 :(得分:1)

尝试以下:

  1. 在您的脚本开头添加# -*- coding: utf-8 -*-魔术评论(详情here
  2. 使用“u”字符串声明和字符串常量
  3. 下面的

    是一个适合我的例子

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

    返回:

      

    éé

         

    EE

         

    EE

    希望这有帮助,尊重