x871kx6167ss7 Skrevet 23. august 2008 Del Skrevet 23. august 2008 (endret) Hei og hå! Prøver å få en liten sak til å dumpe en rss-feed. Og det fungerer egentlig helt fint. Output: Klikk for å se/fjerne innholdet nedenfor [peter@aasen scripts]$ ./uiorss.py http://www.uio.no/studier/emner/matnat/ifi/INF1001/h08/beskjeder.xml?vrtx=rss INF1000 - høst 2008 Beskjeder fra INF1000 - høst 2008 ======================== 20/8 - 2008 Nå er <a href="http://www.uio.no/studier/emner/matnat/ifi/INF1000/h08/obliger/">Oblig1</a> lagt ut. ======================== 11/8 - 2008 Til alle gruppelærere (ikke studentene) - møte for fordeling av grupper tirsdag 19. aug. kl. 09.15 i Lille Aud. Alle gruppelærere må møte ! ======================== Men dersom jeg prøver å pipe det gjennom html2text(eller hva som helt annet), da kjefter python på meg. Klikk for å se/fjerne innholdet nedenfor [peter@aasen scripts]$ ./uiorss.py http://www.uio.no/studier/emner/matnat/ifi/INF1000/h08/beskjeder.xml?vrtx=rss | html2text Traceback (most recent call last): File "./uiorss.py", line 33, in <module> main() File "./uiorss.py", line 21, in main print title UnicodeEncodeError: 'ascii' codec can't encode character u'\xf8' in position 11: ordinal not in range(128) Har prøvd å endre linjen til "print unicode(title, "utf-8")", men uten hjelp: Klikk for å se/fjerne innholdet nedenfor [peter@aasen scripts]$ ./uiorss.py http://www.uio.no/studier/emner/matnat/ifi/INF1000/h08/beskjeder.xml?vrtx=rss | html2text Traceback (most recent call last): File "./uiorss.py", line 33, in <module> main() File "./uiorss.py", line 21, in main print unicode(title, "utf-8") TypeError: decoding Unicode is not supported Noen som har en ide om hva som er gærent? Synes det er rart at den fungerer helt fint til vanlig, men når jeg prøver å pipe den så fungerer det ikke. Dersom jeg copy-paster outputen fra når den kjøres uten pipe for så å kjøre det gjennom html2text fungerer det helt fint. Her er koden dersom noen vil se: Klikk for å se/fjerne innholdet nedenfor #!/usr/bin/python # -*- coding: utf-8 -*- import feedparser import commands import sys def get_feed(url): d = feedparser.parse(url) title = d["feed"]["title"] subtitle = d.feed.subtitle return title, subtitle, d["entries"] def parse_time(time): return str(time[2]) + "/" + str(time[1]) + " - " + str(time[0]) def main(): url = sys.argv[1] title, subtitle, entries = get_feed(url) print unicode(title, "utf-8") print "\t", subtitle print "========================" for entry in entries: print "\t", parse_time(entry["updated_parsed"]), print entry["summary_detail"]["value"] print "========================" if __name__ == "__main__": if len(sys.argv) < 2: print "error: syntax: %s [options] rss-url" % sys.argv[0] sys.exit(1) main() EDIT: etter en del leting virker det som jeg har funnet feilkilden: Klikk for å se/fjerne innholdet nedenfor [peter@aasen ~]$ cat test.py #!/usr/bin/python # -*- coding: utf-8 -*- import sys print sys.stdout.encoding print u"Hei på deg" [peter@aasen ~]$ ./test.py UTF-8 Hei på deg [peter@aasen ~]$ ./test.py | html2text Traceback (most recent call last): File "./test.py", line 7, in <module> print u"Hei på deg" UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 5: ordinal not in range(128) None <-- LOOK HERE! [peter@aasen ~]$ Men jeg har enda ikke funnet ut hvordan jeg endrer det, så har ikke løst det helt enda. EDIT2: Løsningen: import sys, codecs if sys.stdout.encoding is None: sys.stdout = codecs.open("/dev/stdout", "w", 'utf-8') Endret 24. august 2008 av Blackslash Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå