【问题标题】:UnicodeEncodeError and inserting a data into dbUnicodeEncodeError 并将数据插入数据库
【发布时间】:2013-05-05 04:10:50
【问题描述】:

我有一个 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。

那么我该如何解决这个问题呢?

【问题讨论】:

  • 创建数据库时使用了什么字符集?

标签: python mysql python-2.7


【解决方案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代码中添加#coding: utf8。注意,这是一个注释。顺便说一下,你不必设置编码在mysql5.6中。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 2023-04-10
      • 2021-10-21
      相关资源
      最近更新 更多