我在使用 Scrapy 时遇到编码问题,希望有人能帮助我。
- 在我的蜘蛛上:
item['title'] = html.xpath('.//h5/text()')
- 关于管道:
item['title'] = item['title'].extract()[0].encode('utf-8', 'replace')
结果字符串类似于 Namontana \xe2\x80\x93 Une attaque \xc3\xa0 main arm\xc3\xa9e avort\xc3\xa9e
.我将所有项目保存在数据库中(目前为 mysql)。
现在我想在网站上显示所有这些项目,但我的问题是我无法将 \xe2(例如)转换为可视字符。
我已经试过了:
- 添加
# -*- coding: utf-8 -*-
在所有 .py 文件的开头 - 使用
htmlentities
或utf8_decode
使用 PHP 代码显示时的功能 - 添加
unicode(response.body.decode(response.encoding)).encode('utf-8')
在我的蜘蛛上 - 添加
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
到我的 HTML 页面 - 检查所有文件并将其转换为无 BOM 的 UTF8
目前,我唯一的选择是使用自定义函数来替换所有字符(解释 here ),但我认为他们有更好的解决方案。
预先感谢您的帮助。
最佳答案
e28093 是 EN DASH 的 utf8 编码的十六进制:http://www.fileformat.info/info/unicode/char/2013/index.htm
c3a0 和 c3a9 代表重音字母:
mysql> SELECT UNHEX('e28093c3a0c3a9');
+-------------------------+
| UNHEX('e28093c3a0c3a9') |
+-------------------------+
| –àé |
+-------------------------+
我不知道是什么提供了“\x”,但这是十六进制的常见前导符。
如果 SELECT 出现\x 等,那么这不是存储数据的好方法。如果 SELECT HEX(column)
得到 ...e28093...
,那很好。
关于python - 如何使用Scrapy编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146383/