Problem feedparser.py

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

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]
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

sys.setdefaultencoding? Aber ob Dir das wirklich helfen wird...
MfG
HWK
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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

[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
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dann solltest du vielleicht mal mit deinem Code und ggf. mit deinen Daten herausruecken.
Ohne das ist es fuer uns nicht weniger seltsam.
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

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
>>>
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Code: Alles auswählen

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

Wohl eher "utf-8" oder man müsste die erste ``print``-Anweisung entsprechend anpassen.
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

Super hat geklappt.

Danke!
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

Wie seit ihr darauf gekommen? Nur mal so als Hilfe für mich, damit ich das vielleicht auch mal selber hinkriege.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Schau dir die Folien an.
P.S. Testen in IDLE kann zu unerwarteten Ergebnissen fuehren (in dem Fall funktioniert aber auch der normale Interpreter)
Antworten