2016-02-28 80 views
0

我无法使PyQt正确显示带有特殊字符的字符串。从拖放动作中,我最终得到的文件名为QString,可能包含一个空格或一个丑陋的德语UmlautePyQt QString掩码特殊字符并且不能正确显示

为简单起见,我们考虑这是我想要处理的文件名:'abc defä.ghi',生成的QString I得到是'abc%20.def%C3%A4.ghi'。我现在只是想打印原始字符串:

from PyQt4.QtCore import QString, QTextCodec, QTextDecoder 
s = QString('abc%20.def%C3%A4.ghi') 
print s, unicode(s), s.toUtf8() 

没有什么似乎工作,我害怕我失踪的明显。

回答

2

不确定从哪里获取数据,但显然不是UTF-8编码。它是百分比编码 - 所以从互联网上,不知何故?

无论如何,它应该在python2被解码这样的:

>>> b = QtCore.QByteArray.fromPercentEncoding('abc%20.def%C3%A4.ghi') 
>>> b.data() 
'abc .def\xc3\xa4.ghi' 
>>> s = b.data().decode('utf8') 
>>> print s 
abc .defä.ghi 
+0

其实它不是来自互联网,但是从Windows资源管理器拖放文件到QListWidget一个拖放结果。我完全错过了从QByteArray的PerceenEncoding方法。我对'%'符号有点困惑,但显然并没有完全想到这一点 – MichaelA