Seite 1 von 1

Problem feedparser.py

Verfasst: Freitag 21. August 2009, 11:13
von andreaszdw
Ich benutze http://www.feedparser.org/ um einen RSS-Feed auf meiner Homepage zu lesen.

Ich bekomme diese Fehlermeldung über cgitb.enable():
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 14: ordinal not in range(128)
Dieser Fehler bedeutet ja, dass ich mit ascii-encoding einen ISO-8859-1-encoded-String ausgeben möchte.

Der Webserver hat leider als defaultencoding ascii eingestellt. Habe ich über sys.getdefaultencoding() herausbekommen.

Wie kriege ich jetzt den RSS-Feed von z. B. Spiegel, der nun mal in ISO-8859-1 codiert ist ohne Fehler ausgegeben.

Ich habe

Code: Alles auswählen

# -*- coding: UTF-8 -*- 
in der Datei am Anfang stehen. Leider ist defaultencoding trotzdem noch ascii. Gibt es noch eine Möglichkeit dies zu ändern?[/code]

Verfasst: Freitag 21. August 2009, 11:40
von HWK
sys.setdefaultencoding? Aber ob Dir das wirklich helfen wird...
MfG
HWK

Verfasst: Freitag 21. August 2009, 11:46
von BlackJack
@andreaszdw: Das Default-Encoding ist *immer* ASCII und das sollte man auch nicht ändern. Wenn Du Unicode ausgeben möchtest musst Du halt explizit in die Kodierung umwandeln, die Du haben möchtest.

Verfasst: Freitag 21. August 2009, 11:57
von cofi
[quote="BlackJack"]@andreaszdw: Das Default-Encoding ist *immer* ASCII.[/quote]
In Python 3.x ist es UTF-8 (aber ich weiss ja, dass du noch von vorgestern bist *g*)

Zum Thema Unicode sind Leonidas' Folien sehr empfehlenswert: http://wiki.python.de/User%20Group%20M% ... folien.pdf

webserver - desktop

Verfasst: Freitag 21. August 2009, 12:11
von andreaszdw
Das merkwürdige ist, wenn ich das Programm auf dem webserver laufen lasse, bekomm ich die Fehlermeldung.

Wenn es auf dem Desktop läuft, funktioniert es. Auf dem Server läuft 2.4, auf dem Desktop läuft 2.6. Beides also nicht 3.0 Version.

Verfasst: Freitag 21. August 2009, 12:13
von cofi
Dann solltest du vielleicht mal mit deinem Code und ggf. mit deinen Daten herausruecken.
Ohne das ist es fuer uns nicht weniger seltsam.

Code

Verfasst: Freitag 21. August 2009, 13:01
von andreaszdw
Hier der Code:

Code: Alles auswählen

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

import cgitb;cgitb.enable() 
import feedparser 

print "Content-type: text/html; charset=utf-8\r\n" 
print "<pre>" 

print sys.getdefaultencoding()
spiegel_index_rss_url = "http://www.spiegel.de/schlagzeilen/tops/index.rss"

d = feedparser.parse( spiegel_index_rss_url )

print d.feed.title
print d.feed.link
print d.encoding
print d.feed.description
Hier der Fehler im Server:
ascii
SPIEGEL ONLINE - Schlagzeilen
http://www.spiegel.de
ISO-8859-1

--> -->



UnicodeEncodeError Python 2.4.4: /usr/bin/python
Fri Aug 21 14:00:56 2009
A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

/home/u0062213817/public_html/rss/rsstest.py
19 print d.feed.title
20 print d.feed.link
21 print d.encoding
22 print d.feed.description
23 #print d.feed.date
d = {'feed': {'lastbuilddate': u'Fri, 21 Aug 2009 13...egel.de/politik/ausland/0,1518,643980,00.html'}]}, d.feed = {'lastbuilddate': u'Fri, 21 Aug 2009 13:59:38 +0...ed_parsed': (2009, 8, 21, 11, 59, 38, 4, 233, 0)}, d.feed.description = u'Deutschlands f\xfchrende Nachrichtenseite. Alles Wi...t, Sport, Kultur, Wissenschaft, Technik und mehr.'
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 14: ordinal not in range(128)
args = ('ascii', u'Deutschlands f\xfchrende Nachrichtenseite. Alles Wi...t, Sport, Kultur, Wissenschaft, Technik und mehr.', 14, 15, 'ordinal not in range(128)')
encoding = 'ascii'
end = 15
object = u'Deutschlands f\xfchrende Nachrichtenseite. Alles Wi...t, Sport, Kultur, Wissenschaft, Technik und mehr.'
reason = 'ordinal not in range(128)'
start = 14
Hier die Ausgabe in IDLE:
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

****************************************************************
Personal firewall software may warn about the connection IDLE
makes to its subprocess using this computer's internal loopback
interface. This connection is not visible on any external
interface and no data is sent to or received from the Internet.
****************************************************************

IDLE 2.6.2
>>> ================================ RESTART ================================
>>>
Content-type: text/html; charset=utf-8


<pre>
ascii
SPIEGEL ONLINE - Schlagzeilen
http://www.spiegel.de
ISO-8859-1
Deutschlands führende Nachrichtenseite. Alles Wichtige aus Politik, Wirtschaft, Sport, Kultur, Wissenschaft, Technik und mehr.
Fri, 21 Aug 2009 13:59:45 +0200
>>>

Verfasst: Freitag 21. August 2009, 13:11
von HWK

Code: Alles auswählen

print d.feed.description.encode('ISO-8859-1')
MfG
HWK

Verfasst: Freitag 21. August 2009, 14:16
von BlackJack
Wohl eher "utf-8" oder man müsste die erste ``print``-Anweisung entsprechend anpassen.

Hat geklappt!

Verfasst: Samstag 22. August 2009, 19:28
von andreaszdw
Super hat geklappt.

Danke!

Klein, dumme Frage

Verfasst: Samstag 22. August 2009, 20:19
von andreaszdw
Wie seit ihr darauf gekommen? Nur mal so als Hilfe für mich, damit ich das vielleicht auch mal selber hinkriege.

Verfasst: Samstag 22. August 2009, 21:06
von cofi
Schau dir die Folien an.
P.S. Testen in IDLE kann zu unerwarteten Ergebnissen fuehren (in dem Fall funktioniert aber auch der normale Interpreter)