0

次の Python コードは、BeautifulStoneSoup を使用して、Tolkien の "The Children of Húrin" の LibraryThing API 情報をフェッチします。

import urllib2

from BeautifulSoup import BeautifulStoneSoup

URL = ("http://www.librarything.com/services/rest/1.0/"
            "?method=librarything.ck.getwork&id=1907912"
            "&apikey=2a2e596b887f554db2bbbf3b07ff812a")

soup = BeautifulStoneSoup(urllib2.urlopen(URL),
                          convertEntities=BeautifulStoneSoup.ALL_ENTITIES)
title_field = soup.find('field', attrs={'name': 'canonicaltitle'})
print title_field.find('fact').string

残念ながら、'Húrin' の代わりに 'Húrin' が出力されます。これは明らかにエンコーディングの問題ですが、期待される出力を得るために何をする必要があるかわかりません。助けていただければ幸いです。

4

2 に答える 2

4

Webページのソースでは、次のようになりますThe Children of Húrin。したがって、エンコーディングは、XMLに変換される前に、すでにどこかで壊れています...

それがすべての本の一般的な問題であり、それを回避する必要がある場合、これはうまくいくようです:

unicode(title_field.find('fact').string).encode("latin1").decode("utf-8")
于 2009-03-09T23:05:28.227 に答える
1

ウェブページのエンコーディングについて嘘をついている可能性があります。出力は UTF-8 のようになります。最後に str がある場合は、UTF-8 としてデコードする必要があります。代わりに Unicode を使用している場合は、最初に Latin-1 としてエンコードする必要があります。

于 2009-03-09T22:53:49.880 に答える