我得到这个错误UnicodeEncodeError: 'Latin-1的' 编解码器不能编码字符U '\ u2014'UnicodeEncodeError: 'Latin-1的' 编解码器不能编码字符U ' u2014'
我试图将大量新闻文章加载到MySQLdb中。不过,我在处理非标准字符时遇到了困难,对于各种字符我都会遇到数百个这样的错误。我可以使用.replace()单独处理它们,但我想要一个更完整的解决方案来正确处理它们。
[email protected]:~/scripts/work$ python test_db_load_error.py
Traceback (most recent call last):
File "test_db_load_error.py", line 27, in <module>
cursor.execute(sql_load)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 157, in execute
query = query.encode(charset)
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2014' in position 158: ordinal not in range(256)
我的脚本;
import MySQLdb as mdb
from goose import Goose
import string
import datetime
host = 'rds.amazonaws.com'
user = 'news'
password = 'xxxxxxx'
db_name = 'news_reader'
conn = mdb.connect(host, user, password, db_name)
url = 'http://www.dailymail.co.uk/wires/ap/article-3060183/Andrew-Lesnie-Lord-Rings-cinematographer-dies.html?ITO=1490&ns_mchannel=rss&ns_campaign=1490'
g = Goose()
article = g.extract(url=url)
body = article.cleaned_text
body = body.replace("'","`")
load_date = str(datetime.datetime.now())
summary = article.meta_description
title = article.title
image = article.top_image
sql_load = "insert into articles " \
" (title,summary,article,,image,source,load_date) " \
" values ('%s','%s','%s','%s','%s','%s');" % \
(title,summary,body,image,url,load_date)
cursor = conn.cursor()
cursor.execute(sql_load)
#conn.commit()
任何帮助,将不胜感激。
正在重新配置你的数据库来存储UTF-8,而不是Latin-1的一个选择吗?它需要对现有数据进行重新编码(数据迁移)。 –
你有什么样的数据库字符编码?你有没有定义它,或者它是MySQL的默认?如果是你有latin1,但也许你需要utf-8取决于你想插入什么 –
你真的应该在这里使用* SQL参数*,而不是使用字符串插值。从'sql_load'行删除'%(....)'并将元组移动到'cursor.execute()'的第二个参数。 'sql_load =“....带有%s占位符的查询字符串...”'和'cursor.execute(sql_load,(title,summary,body,image,url,load_date))''。 –