2

キリル文字(ロシア語など)で書かれたRSSソースを読み取ろうとするPythonコードがあります。これは私が使用するコードです:

import feedparser
from urllib2 import Request, urlopen

d=feedparser.parse(source_url)

# Make a loop over the entries of the RSS feed.
for e in d.entries:
    # Get the title of the news.
    title = e.title
    title = title.replace(' ','%20')
    title = title.encode('utf-8')

    # Get the URL of the entry.
    url = e.link
    url = url.encode('utf-8')


    # Make the request. 
    address = 'http://example.org/save_link.php?title=' + title + '&source=' + source_name + '&url=' + url

    # Submit the link.
    req = Request(address)
    f = urlopen(req)

encode('utf-8')タイトルはキリル文字で表記されており、問題なく動作するので使用します。RSSソースの例はここにあります。別のURLからRSSソースのリストを読み込もうとすると、問題が発生します。詳細については、RSSソースのリスト(ソースのURLとキリル文字で指定された名前)を含むWebページがあります。リストの例はここにあります:

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<title></title>
<meta http-equiv='Content-Type' content='text/html;charset=utf-8'>

ua, Корреспондент, http://k.img.com.ua/rss/ua/news.xml
ua, Українська Правда, http://www.pravda.com.ua/rss/

</body>
</html>

このドキュメントに記載されているキリル文字にencode('utf-8')を適用しようとすると、問題が発生します。取得しUnicodeDecodeErrorます。誰かがその理由を知っていますか?

4

1 に答える 1

6

encodeあなたがそれにデコードしようとするオブジェクトをUnicodeDecodeError提供した場合にのみ与えられます; http://wiki.python.org/moin/UnicodeDecodeErrorを参照してください。strunicode

最初にstrオブジェクトをデコードする必要があります。unicode

name = name.decode('utf-8')

これはstrUTF-8エンコーディングを取り、unicodeオブジェクトを提供します。

feedparserすでにデコードされたフィードデータを返すため、投稿したコードで機能しますunicode

于 2012-07-11T10:03:17.747 に答える