2

我有一个 Python 刮板,它刮板一个网站并将数据插入 MySql 数据库。突然间我得到了一个错误

UnicodeEncodeError: 'latin-1' codec can't encode character u'\u20ac' in position 39: ordinal not in range(256)当我解析包含EURO -- €1.

我看到一些描述如何解决此问题的文章,但不明白如何将它们应用于我的问题。我只是使用 刮取数据BeautifulSoup,我不手动对其进行编码/解码。

我使用这个模块import MySQLdb来处理 MySql。

那么我该如何摆脱这个问题呢?

4

2 回答 2

1

如果您在表格中使用“latin-1”编码(您可以使用 来检查字符集Show Create Table <table-name>;),那么您可以将所有未知字符替换为其 HTML 实体:

u'EURO -- €1'.encode('latin-1', 'xmlcharrefreplace')
# result is 'EURO -- &#8364;1'

如果您使用 Unicode 编码,只需创建一个 Unicode 字符串u''并将其传递给 DB。

于 2013-05-05T05:57:38.070 回答
1

我以前也有同样的问题,我认为是因为 Python 默认使用 unicode 编码,但是 mysql 使用 latin 作为默认编码,如果你的 mysql 数据库不支持 utf-8,请使用这个

只需default-character-set = utf8在mysql配置文件中的[client]character-set-server = utf8下和[mysqld]下添加即可。linux中的mysql配置文件是/etc/my.cnf,我不知道在windows中的位置,你可以自己找到。同时,你知道用于sql_con = MySQLdb.connect(host=MYSQL_ADDR , user=MYSQL_USER , passwd=MYSQL_PWD , db=MYSQL_DB , charset="utf8")连接mysql。为了安全,你可以#coding: utf8在你的python代码中添加。注意,它是一个注释。顺便说一下,你不必在mysql5.6中设置编码。

于 2013-05-06T08:58:43.150 回答