UnicodeEncodeError并将数据插入db

时间:2013-05-05 04:10:50

标签: python mysql python-2.7

我有一个Python刮刀,可以抓取一个网站并将数据插入到MySql db中。

突然出现错误 当我解析包含UnicodeEncodeError: 'latin-1' codec can't encode character u'\u20ac' in position 39: ordinal not in range(256)符号的字符串时,

EURO -- €1

我看到一些文章描述了如何解决这个问题但却不明白如何将它们应用到我的问题中。我只是使用BeautifulSoup抓取数据,我不手动编码/解码。

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

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

2 个答案:

答案 0 :(得分:1)

如果你在表格中使用'latin-1'编码(你可以使用Show Create Table <table-name>;检查字符集),那么你可以用他们的HTML实体替换所有未知字符:

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

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

答案 1 :(得分:1)

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

只需在mysql配置文件中的[client]下添加default-character-set = utf8,在[mysqld]下添加character-set-server = utf8。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。为了安全,你可以在你的python code.attention中添加#coding: utf8,它是一个comment.by顺便说一句,你不必在mysql5.6中设置编码。