我已经看到了question我怀疑如何在运行时将var转换为unicode? 是不是正确使用unicode功能? 还有其他方法可以在运行时转换字符串吗?
print(u'Cami\u00f3n') # prints with right special char
name=unicode('Cami\u00f3n')
print(name) # prints bad ===> Cami\u00f3n
name.encode('latin1')
print(name.decode('latin1')) # prints bad ===> Cami\u00f3n
encoded_id = u'abcd\xc3\x9f'
encoded_id.encode('latin1').decode('utf8')
print encoded_id.encode('latin1').decode('utf8') # prints right
我在stackoverflow上看到了很多python unicode问题,但我无法理解这种行为。
答案 0 :(得分:6)
正是因为如果你没有为unicode
函数指定任何编码,那么:
unicode()将模仿str()的行为,除了它返回Unicode字符串而不是8位字符串。更确切地说,如果object是Unicode字符串或子类,它将返回该Unicode字符串,而不应用任何其他解码。
因此,您的unicode版本为str
(Unicode部分将被转义):
>>> name=unicode('Cami\u00f3n')
>>> print(name)
Cami\u00f3n
>>> name
u'Cami\\u00f3n'
^
为了解决这个问题,您可以使用'unicode-escape'
作为编码来逃避将Unicode转换为字符串!
>>> name=unicode('Cami\u00f3n','unicode-escape')
>>> name
u'Cami\xf3n'
>>> print(name)
Camión