Gen*_*han 4 python unicode encoding utf-8 scrapy
我收到了这个字符串'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)
Run Code Online (Sandbox Code Playgroud)
这个答案很好地解释了.但我和那个问题的OP 有同样的问题.在评论的答案中,温斯顿说:"你不应该编码一个字符串对象..."
但我正在工作的框架要求它应该转换为unicode字符串.我使用scrapy而且我有这条线.
loader.add_value('name', product_name)
Run Code Online (Sandbox Code Playgroud)
这里product_name包含有问题的字符串,它会抛出错误.
Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我能够根据经验猜测编码,您需要为遇到的每个编码提供正确的编解码器.对于Web数据,通常包含在content-type标头的from中:
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
iso-8859-1例如,Latin 1编码的官方标准名称在哪里.Python将其识别latin1为别名iso-8859-1.
请注意,您的输入数据不是纯ASCII.如果是,它只使用0到127范围内的字节; \xa3小数是163,所以在ASCII范围之外.
| 归档时间: |
|
| 查看次数: |
7496 次 |
| 最近记录: |