Форум сайта python.su
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png) 
			 
							 0
  0   
								
								пытаюсь написать парсер фидов c помощью feedparser'a при обработки некоторых фидов возникает вот такая ошибка:
Traceback (most recent call last):
  File “test.py”, line 17, in <module>
    sql = “UPDATE `feed` SET `feed_title` ='%s' AND `feed_description` ='%s' WHE
RE `feed_id` =%s” % (conx.escape_string(f.feed.get('title','')), conx.escape_str
ing(f.feed.get('description','')),'210')
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-4: ordin
al not in range(128)
 
Собственно сам код.
import feedparser, MySQLdb as db
conx = db.connect (host = “localhost”,user = “root”,passwd = “”,db = “db_test_feed”)
db_cursor = conx.cursor ()
db_cursor.execute('SET NAMES utf8')
db_cursor.execute('SET CHARACTER SET utf8')
f  = feedparser.parse('http://feeds.feedburner.com/Radio-t')
sql = “UPDATE `feed` SET `feed_title` ='%s' AND `feed_description` ='%s' WHERE `feed_id` =%s” % (conx.escape_string(f.feed.get('title','')), conx.escape_string(f.feed.get('description','')),'210')
print sql
db_cursor.execute(sql)
Как исправить пообную ошибку? Заранее благодарен…
Офлайн
 
							 0
  0   
								
								Попробуй указать кодировку в скрипте.
Офлайн
 
							 0
  0   
								
								попробуй так:
# -*- coding: utf-8 -*-
import feedparser, MySQLdb as db
conx = db.connect (host = “localhost”,user = “root”,passwd = “”,db = “db_test_feed”)
db_cursor = conx.cursor ()
db_cursor.execute('SET NAMES utf8')
db_cursor.execute('SET CHARACTER SET utf8')
f  = feedparser.parse('http://feeds.feedburner.com/Radio-t')
sql = u“UPDATE `feed` SET `feed_title` ='%s' AND `feed_description` ='%s' WHERE `feed_id` =%s” % (conx.escape_string(f.feed.get('title','')), conx.escape_string(f.feed.get('description','')),'210')
print sql
sql = sql.encode('utf-8')
db_cursor.execute(sql)
Офлайн
 
							 0
  0   
								
								
#так должно быть по идее
f.feed.get('description','').decode('utf8')
#так в реале
f.feed.get('description','').decode('latin1')
лично я непонимаю каким образом фидбернер умудрился перегнать страницу из утф8 в латин1 - но видимо такая у него по-умолчанию внутреняя кодировка
Отредактировано (Июль 1, 2008 12:43:20)
Офлайн
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png)