我正在尝试将Unicode字符串简单转换为标准字符串,但没有成功。
我有:PyQt4.QtCore.QString(u'\xc5\x9f')
我想:'\xc5\x9f'
注意str类型不是unicode,因为我使用的库不接受unicode。
这是我尝试的,你可以看到我是多么绝望:):
>>> s = QtCore.QString(u'\xc5\x9f')
>>> str(s)
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) '
>>> s.toUtf8()
PyQt4.QtCore.QByteArray('\xc3\x85\xc2\x9f')
>>> s.toUtf8().decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'QByteArray' object has no attribute 'decode'
>>> str(s.toUtf8()).decode("utf-8")
u'\xc5\x9f'
>>> str(str(s.toUtf8()).decode("utf-8"))
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)
我知道有很多与Unicode相关的问题,但我找不到这个答案。
我该怎么办?
编辑:
我发现了一种愚蠢的方式:
>>> unicoded = str(s.toUtf8()).decode("utf-8")
>>> unicoded
u'\xc5\x9f'
>>> eval(repr(unicoded)[1:])
'\xc5\x9f'
你知道更好的方法吗?
答案 0 :(得分:8)
如果您有QString数据类型的unicode字符串,并且需要将其转换为python字符串,那么您只需:
unicode(YOUR_QSTRING_STRING)
答案 1 :(得分:4)
这就是你想要的吗?
In [23]: a
Out[23]: u'\xc5\x9f'
In [24]: a.encode('latin-1')
Out[24]: '\xc5\x9f'
In [25]: type(a.encode('latin-1'))
Out[25]: <type 'str'>