2013-05-05 53 views
2

我有一個Python刮板,它可以刮掉一個網站並將數據插入MySql數據庫。突然間,我得到了一個錯誤UnicodeEncodeError並將數據插入分貝

UnicodeEncodeError: 'latin-1' codec can't encode character u'\u20ac' in position 39: ordinal not in range(256)當我解析了包含EURO -- €1的符號的字符串。

我看到一些文章描述如何解決這個問題,但不明白如何將它們應用於我的問題。我只是使用BeautifulSoup來刮取數據,我不會手動對它進行編碼/解碼。

我使用此模塊import MySQLdb來使用MySql。

那麼我該如何擺脫這個問題呢?

+1

創建數據庫時使用了什麼字符集? – 2013-05-05 04:35:17

回答

2

我也有同樣的問題befor,我想這是因爲Python中使用Unicode編碼爲默認值,但MySQL的使用拉丁字母作爲默認編碼,如果你的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.for安全,您可以在您的python code.attention中添加#coding: utf8,它是一個註釋。順便說一句,您不必在mysql5.6中設置編碼。

0

如果你在你的表使用的拉丁-1「編碼(您可以檢查使用Show Create Table <table-name>;字符集),那麼你就可以與他們的HTML實體替換所有未知字符:

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

如果你使用Unicode編碼,只需創建一個帶有u''的Unicode字符串並將其傳遞給數據庫。