我試圖爲學校項目創建一個新聞應用程序,我從當地報紙的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