2016-11-30 1 views
1

Ich bin ein Python-Programm zu schreiben BeautifulSoup4 verwenden, und wenn ich ein HTML-Element zu holen, die eine stilisierte Anführungszeichen u'\u2019' enthält Ich bin in der Lage, wie dies aus dem ganzen Elemente drucken:Python: Warum kann ich ein Unicode-Zeichen auf einer Zeile Code drucken, aber das gleiche Unicode-Zeichen verursacht einen Fehler, wenn ich versuche, es später zu drucken?

Code:

print "Using song: %s" % (song_link) 

Ergebnis:

Using song: <a href="http://www.songlyrics.com/anna-kendrick/cups-pitch-perfects-when-im-gone-lyrics/" title="Cups (Pitch Perfect’s “When I’m Gone”) Lyrics Anna Kendrick">Cups (Pitch Perfect’s “When I’m Gone”)</a> 


Aber dann, wenn ich versuche auszudrucken nur der Text dieses Elements, es scheitert:

Code:

print "Song text: %s" % (song_link.text) 

Ergebnis:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 30: ordinal not in range(128) 


Warum passiert das? Warum funktioniert das einen Moment und dann nicht der nächste? Es ist reproduzierbar.

Antwort

1

Die Ausgabe Ihres ersten Falles ist eine Bytefolge. Die Ausgabe Ihres zweiten Falls ist eine Unicode-Zeichenfolge. Unicode-Zeichenfolgen werden implizit in der Terminalcodierung codiert, oder ascii, wenn die Terminalcodierung nicht ermittelt werden konnte, was zu Ihrem Fehler führt.

Wenn Sie Ihre Umgebung nicht kennen, müssen Sie ermitteln, warum das Drucken von Unicode-Zeichenfolgen standardmäßig in ascii codiert ist, oder die Zeichenfolge explizit mit .encode('utf8') codieren.

+0

Nur .encode ('utf8') auf der Zeichenfolge vor dem Drucken aufrufen, scheint es behoben zu haben - danke! – Dasmowenator

Verwandte Themen