我收到了这个字符串'Velcro Back Rest \xa36.99'
。请注意,前面没有u
。它只是简单的ascii。
如何将其转换为unicode? p>
我试过了,
>>> unicode('Velcro Back Rest \xa36.99')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 17: ordinal not in range(128)
This answer很好地解释了。但我有same question作为该问题的OP。在答案中,温斯顿says "You should not encoding a string object ..."
但是我正在使用的框架要求它应该转换为unicode字符串。我使用scrapy而且我有这条线。
loader.add_value('name', product_name)
此处product_name
包含有问题的字符串,它会抛出错误。
答案 0 :(得分:14)
您需要指定一个编码,将字节解码为Unicode:
>>> 'Velcro Back Rest \xa36.99'.decode('latin1')
u'Velcro Back Rest \xa36.99'
>>> print 'Velcro Back Rest \xa36.99'.decode('latin1')
Velcro Back Rest £6.99
在这种情况下,我能够根据经验猜测编码,您需要为遇到的每种编码提供正确的编解码器。对于Web数据,通常包含在内容类型标题中:
Content-Type: text/html; charset=iso-8859-1
其中iso-8859-1
是拉丁语1编码的官方标准名称。 Python将latin1
识别为iso-8859-1
的别名。
请注意,您的输入数据是不是纯ASCII。如果是,它只使用0到127范围内的字节; \xa3
是十六进制的163,因此在ASCII范围之外。