【发布时间】:2015-09-23 20:58:17
【问题描述】:
我正在尝试为一个学校项目创建一个新闻应用程序,在该应用程序中我从当地报纸的 RSS 提要中获取信息,以便将多份报纸合并为一份。
当我尝试将收集到的数据插入 Mysql 数据库时遇到问题。
当我简单地打印我的日期时(例如:print 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,甚至尝试了python的“try / except”功能,但似乎没有任何效果。
我已经用 type(u['entries'].title) 检查了每个条目的类型,它们都是 unicode,现在我需要以一种可以将它们放入我的 mysql 数据库的方式对它们进行编码
在 rss 网站上,它声明它已经编码为 utf-8,即使我明确告诉 python 也将其编码为 utf-8,它仍然给我错误:'ascii' codec can't encode字符 u'\xf6'
我已经尝试了很多关于这个主题的答案,例如使用 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:
print t -
你试过
use_unicode=Trueconnect()参数吗?同样,不要编码,传递 Unicode 字符串——让 db 驱动程序使用正确的编码(前面通过charset参数指定)进行编码。 -
不相关:不要使用字符串格式插入 sql 值,而是使用参数化查询。
标签: python mysql utf-8 character-encoding rss