2009-03-09 3 views
0

다음 Python 코드는 BeautifulStoneSoup를 사용하여 Tolkien의 "The Children of Húrin"에 대한 LibraryThing API 정보를 가져옵니다.Python을 사용하여 HTML 엔터티 디코딩

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'대신 'Hrinin'을 인쇄합니다. 이것은 분명히 인코딩 문제이지만 예상되는 출력을 얻으려면 내가해야 할 일을 해결할 수 없습니다. 도움말 크게 감사하겠습니다.

답변

4

웹 페이지의 출처에서 다음과 같이 보입니다. The Children of Húrin. 인코딩이 이미 그들의 편에 어딘가 고장 그래서 그것은 심지어 모든 책과 일반적인 문제가 있다면

... XML로 변환하고 당신이 그것을 해결해야되기 전에,이 작동하는 것 같다 :

unicode(title_field.find('fact').string).encode("latin1").decode("utf-8") 
+0

그래, 그게 나을 것 같아. 나는 LibraryThing에 그것을 분류하는 것에 대해 연락했다. 감사. :) –

1

웹 페이지의 인코딩이 거짓말 일 수 있습니다. 출력물은 UTF-8처럼 보입니다. 끝에 str이 있으면 UTF-8로 디코딩해야합니다. 대신에 유니 코드가 있다면 Latin-1로 먼저 인코딩해야합니다.