Tuesday 15 June 2010

python - UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 -


मुझे यह स्ट्रिंग 'Velcro Back Rest \ xa36.99' मिला है। ध्यान दें कि इसके पास u सामने नहीं है इसकी सिर्फ सादे आस्की

मैं इसे यूनिकोड में कैसे बदलूं?

मैंने इसे करने की कोशिश की,

  & gt; & gt; & gt; यूनिकोड ( 'वेल्क्रो वापस बाकी \ xa36.99') Traceback (सबसे हाल कॉल पिछले): फ़ाइल "& LT; stdin & gt;", लाइन 1, & lt; मॉड्यूल & gt; UnicodeDecodeError: 'ascii' कोडेक स्थिति 17 में बाइट 0xa3 डिकोड नहीं कर सकते: सीमा (128) में नहीं क्रमसूचक   

यह अच्छी तरह समझाने। लेकिन मेरे पास उस प्रश्न के ओपी के रूप में है। उस टिप्पणी के जवाब में विंस्टन

लेकिन मैं काम कर रहा हूँ ढांचे के लिए यह यूनिकोड स्ट्रिंग परिवर्तित किया जाना चाहिए। मैं scrapy का उपयोग करें और मैं इस लाइन।

  loader.add_value ( 'नाम', PRODUCT_NAME) है   

यहां product_name शामिल कि समस्याग्रस्त स्ट्रिंग और यह त्रुटि फेंकता है

आप के साथ यूनिकोड बाइट्स डिकोड करने के लिए एनकोडिंग निर्दिष्ट करने की जरूरत है:

  & gt; & gt; & gt; 'वेल्क्रो वापस रेस्ट \ xa36.99..decode (' latin1 ') u'Velcro वापस विश्राम \ xa36.99' & gt; & gt; & gt; प्रिंट 'वेल्क्रो वापस रेस्ट \ xa36.99..decode (' latin1 ') Velcro वापस आराम 6.99 £   

इस मामले में, मैं अनुभव से एन्कोडिंग अनुमान करने में सक्षम था, आपको आवश्यकता है प्रत्येक एन्कोडिंग के लिए उपयोग किए जाने वाले सही कोडेक प्रदान करने के लिए वेब डेटा के लिए, जो आम तौर पर सामग्री-प्रकार हैडर में से होता है:

  सामग्री-प्रकार: टेक्स्ट / html; Charset = iso-8859-1   

जहां iso-8859-1 लैटिन 1 एन्कोडिंग के लिए आधिकारिक मानक नाम है, उदाहरण के लिए। iso-8859-1 के लिए एक उपनाम के रूप में latin1 पहचानता है।

ध्यान दें कि आपका इनपुट डेटा नहीं सादे ASCII । अगर ऐसा होता है, तो यह केवल 0 से लेकर 127 तक की सीमा में बाइट का उपयोग करता है; \ xa3 163 दशमलव है, इसलिए एएससीआईआई श्रेणी के बाहर।

No comments:

Post a Comment