我试图为学校项目创建一个新闻应用程序,我从当地报纸的RSS源获取信息,以便将多个报纸合并为一个。尝试向数据库中插入UTF-8数据时出现UnicodeEncodeError
我遇到了问题,当我尝试将我收集的数据插入到我的Mysql数据库。
当我简单地打印日期(例如:打印urlnzz.entries [0] .description)时,德语字符如üäöéà没有问题。
当我尝试将数据插入Mysql数据库但是,我得到"UnicodeEncodeError: 'ascii' codec can't encode character.."
。奇怪的是,这只发生.title和.description,而不是.category(即使也有ü等在那里)
我一直在寻找一个相当一段时间的答案现在,我改变了与
t = urlbernerz.entries[i].title
print t.encode('utf-8')
变量的改变编码字符集为UTF-8,当我连接到数据库,甚至试图蟒蛇的“试/除外”的功能,但似乎没有任何工作。
我已经签有型(U [“项”。标题)每个条目的类型,他们都是unicode的,现在我需要它们编码的方式,我可以把它们放到我的mysqldatabase
它在rss网站上声明它已经被编码为utf-8,即使我明确地告诉python将它编码为utf-8,它仍然给我错误:'ascii'编解码器不能编码字符我'已经尝试了很多对这个问题的答案,如使用str()或使用chardet,但似乎没有任何工作。这里是我的代码
import MySQLdb
import feedparser
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
db = MySQLdb.connect(host="127.0.0.1",
user="root",
passwd="",
db="FeedStuff",
charset='UTF8')
db.charset="utf8"
cur = db.cursor()
urllistnzz =['international', 'wirtschaft', 'sport']
urllistbernerz =['kultur', 'wissen', 'leben']
for u in range (len(urllistbernerz)):
urlbernerz = feedparser.parse('http://www.bernerzeitung.ch/'+urllistbernerz[u]+'/rss.html')
k = len(urlbernerz['entries'])
for i in range (k):
cur.execute("INSERT INTO articles (title, description, date, category, link, source) VALUES (' "+ str(urlbernerz.entries[i].title)+" ', ' " + str(urlbernerz.entries[i].description)+ " ', ' " + urlbernerz.entries[i].published + " ', ' " + urlbernerz.entries[i].category + " ', ' " + urlbernerz.entries[i].link + " ',' Berner Zeitung')")
for a in range (len(urllistnzz)):
urlnzz = feedparser.parse('http://www.nzz.ch/'+urllistnzz[a]+'.rss')
k = len(urlnzz['entries'])
for i in range (k):
cur.execute("INSERT INTO articles (title, description, date, category, link, source) VALUES (' "+str(urlnzz.entries[i].title)+" ', ' " + str(urlnzz.entries[i].description)+ " ', ' " + urlnzz.entries[i].published + " ', ' " + urlnzz.entries[i].category + " ', ' " + urlnzz.entries[i].link + " ', 'NZZ')")
db.commit()
cur.close()
db.close()
无关:不要硬编码的脚本中外部环境(终端),打印的Unicode编码来代替:'打印t' – jfs
你试过'use_unicode =真正的connect()参数?同样,不要编码,传递Unicode字符串 - 让数据库驱动程序使用正确的编码进行编码(通过前面的charset参数指定)。 – jfs
无关:不要使用字符串格式来插入sql值,而是使用参数化查询。 – jfs