5

我得到了这个字符串'Velcro Back Rest \xa36.99'。注意它没有u在前面。它只是普通的ASCII。

如何将其转换为 unicode?

我试过这个,

>>> 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)

这个答案很好地解释了它。但我和那个问题的 OP有同样的问题。在对该评论的回答中,温斯顿说“你不应该对字符串对象进行编码......”

但是我正在工作的框架要求它应该被转换为 unicode 字符串。我使用scrapy,我有这条线。

loader.add_value('name', product_name)

这里product_name包含有问题的字符串,它会引发错误。

4

1 回答 1

16

您需要指定编码以将字节解码为 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 标头的 from 中:

Content-Type: text/html; charset=iso-8859-1

例如,哪里iso-8859-1是拉丁 1 编码的官方标准名称。Pythonlatin1iso-8859-1.

请注意,您的输入数据不是纯 ASCII。如果是,它只会使用 0 到 127 范围内的字节;\xa3是十进制的 163,所以在 ASCII 范围之外。

于 2013-06-20T17:06:15.340 回答