我在使用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 -*-
htmlentities
或utf8_decode
函数unicode(response.body.decode(response.encoding)).encode('utf-8')
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
添加到我的HTML页面目前,我唯一的选择是使用自定义函数替换所有字符(解释here)但我认为它们是更好的解决方案。
提前感谢您的帮助。
答案 0 :(得分:0)
e28093是针对EN DASH的utf8编码的十六进制:http://www.fileformat.info/info/unicode/char/2013/index.htm
c3a0和c3a9代表重音字母:
mysql> SELECT UNHEX('e28093c3a0c3a9');
+-------------------------+
| UNHEX('e28093c3a0c3a9') |
+-------------------------+
| –àé |
+-------------------------+
我不知道提供&#34; \ x&#34;是什么,但这是十六进制的常见引导。
如果SELECT出现了\ x等,那么这不是存储数据的好方法。如果SELECT HEX(column)
出现...e28093...
,那就很好。
答案 1 :(得分:0)
问题来自我的数据库编码。现在它是utf8_unicode_ci,它的效果很好。
答案 2 :(得分:0)
我的解决方案是添加
# -*- coding: utf-8 -*-
在每个文件(蜘蛛,管道等等)和转换(在管道上)字符串从unicode到utf8 [.encode(&#39; utf-8&#39;,&#39;替换&#39;) ]