如何使用刮痧编码

2024-06-16 18:12:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用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转换为可视字符。在

我已经试过了:

  • 在所有.py文件的开头添加# -*- coding: utf-8 -*-
  • 使用PHP代码显示时,请使用htmlentitiesutf8_decode函数
  • 在我的蜘蛛上添加unicode(response.body.decode(response.encoding)).encode('utf-8')
  • <meta http-equiv="content-type" content="text/html; charset=utf-8" />添加到我的HTML页面
  • 检查并将所有文件转换为不带BOM的UTF8

目前,我唯一的选择是使用自定义函数替换所有char(explainhere),但我认为它们是更好的解决方案。在

提前谢谢你的帮助。在


Tags: 文件项目函数texttitleresponsehtmlitem
3条回答

我的解决办法是

# -*- coding: utf-8 -*-

在每个文件(spider、pipeline等…)上,将字符串从unicode转换为utf8[.encode('utf-8','replace')]

问题来自我的数据库编码。现在它是utf8_unicode_ci,它工作得很好。在

e28093是十六进制的,用于短划线的utf8编码:http://www.fileformat.info/info/unicode/char/2013/index.htm

c3a0和c3a9代表重音字母:

mysql> SELECT UNHEX('e28093c3a0c3a9');
+            -+
| UNHEX('e28093c3a0c3a9') |
+            -+
| –àé                     |
+            -+

我不知道是什么提供了“\x”,但这是hex的一个常见的引入。在

如果SELECT出现\x等,那么这不是存储数据的好方法。如果SELECT HEX(column)出现了...e28093...,那就好了。在

相关问题 更多 >