2016-11-30 1 views
1

私はBeautifulSoup4を使用してPythonプログラムを書いている、と私は様式化された引用符u'\u2019'が含まれているHTML要素を取得するとき、私はそうのような全体要素をプリントアウトすることができています:Python:1行のコードでUnicode文字を印刷できますが、後で印刷しようとすると同じUnicode文字でエラーが発生するのはなぜですか?

コード:

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

結果:

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> 


しかし、その後、私は、その要素のテキストだけを印刷しようとすると、それは失敗します。

コード:

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

結果:

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


どうしてですか?なぜこれは一瞬しか働かないのですか?再現性があります。

答えて

1

最初のケースの出力はバイト文字列です。 2番目のケースの出力はUnicode文字列です。 Unicode文字列は暗黙的に端末エンコードにエンコードされます。端末エンコードが特定できない場合はasciiになり、エラーになります。

環境を知らない場合は、Unicode文字列をデフォルトでエンコーディングをasciiに出力するか、文字列を.encode('utf8')で明示的にエンコードする必要があるのか​​を判断する必要があります。

+0

印刷する前に文字列の.encode( 'utf8')を呼び出すと修正されたようです - ありがとう! – Dasmowenator

関連する問題