मैं एक पायथन प्रोग्राम चला रहा हूं जो यूटीएफ -8-एन्कोडेड वेब पेज लाता है, और मैं सुंदर सूप का उपयोग करके HTML से कुछ पाठ निकालता हूं।सुंदर सूप के साथ यूनिकोड तारों के लिए यूटीएफ -8 एन्कोडेड HTML को सही तरीके से कैसे पार्स करें?
हालांकि, जब मैं इस पाठ को किसी फ़ाइल में लिखता हूं (या इसे कंसोल पर प्रिंट करता हूं), तो यह एक अप्रत्याशित एन्कोडिंग में लिखा जाता है।
नमूना कार्यक्रम:
import urllib2
from BeautifulSoup import BeautifulSoup
# Fetch URL
url = 'http://www.voxnow.de/'
request = urllib2.Request(url)
request.add_header('Accept-Encoding', 'utf-8')
# Response has UTF-8 charset header,
# and HTML body which is UTF-8 encoded
response = urllib2.urlopen(request)
# Parse with BeautifulSoup
soup = BeautifulSoup(response)
# Print title attribute of a <div> which uses umlauts (e.g. können)
print repr(soup.find('div', id='navbutton_account')['title'])
चल रहा है इस परिणाम देता है:
# u'Hier k\u0102\u015bnnen Sie sich kostenlos registrieren und/oder einloggen!'
लेकिन मैं एक अजगर यूनिकोड स्ट्रिंग \xf6
के रूप में शब्द können
में ö
रेंडर करने के लिए उम्मीद करेंगे:
# u'Hier k\xf6bnnen Sie sich kostenlos registrieren und/oder einloggen!'
मैंने 'से गुज़रने की कोशिश की है सुंदर सूप को एन्कोडिंग 'पैरामीटर, और read()
और decode()
response
ऑब्जेक्ट की कोशिश कर रहा है, लेकिन यह कोई फर्क नहीं पड़ता है, या कोई त्रुटि फेंकता है।
20 74 69 74 6c 65 3d 22 48 69 65 72 20 6b c3 b6 | title="Hier k..|
6e 6e 65 6e 20 53 69 65 20 73 69 63 68 20 6b 6f |nnen Sie sich ko|
73 74 65 6e 6c 6f 73 20 72 65 67 69 73 74 72 69 |stenlos registri|
मैं अपने अजगर क्षमताओं के सीमा से परे हूँ:
आदेशcurl www.voxnow.de | hexdump -C
साथ
, मैं देख सकते हैं कि वेब पेज वास्तव में UTF-8 एन्कोडेड है ö
चरित्र के लिए (यानी यह 0xc3 0xb6
शामिल हैं) , इसलिए मुझे इस बात पर एक नुकसान हुआ है कि इसे आगे कैसे डिबग करें। कोई सलाह?
अजीब .. के रूप में '\ u0102 \ u015b '' Ăś'' है .. – aIKid
क्या यह इस प्रश्न का डुप्लिकेट नहीं है: http://stackoverflow.com/questions/7219361/python-and-beautifulsoup-encoding-issues?rq=1 – justhalf
@justhalf मुझे लगता है कि मैंने यह प्रश्न देखा है, लेकिन नहीं मुझे लगता है कि मुझे एक ही परिणाम मिल गया है। लेकिन मैं फिर से जांच करूंगा, धन्यवाद। –