UnicodeDecodeError कारण और प्रतिवाद [पायथन]

2019 6 年 月 日 5

जब मैंने पांडा के साथ सेट एक सीएसवी फ़ाइल प्रारूप डेटा को पढ़ने की कोशिश की, तो मुझे तुरंत "यूनिकोडडेकोड एरर: 'यूटीएफ -8' कोडेक बाइट 0x91 को स्थिति 1: अमान्य प्रारंभ बाइट" में त्रुटि का सामना करना पड़ा, इसलिए मैंने कारण पूछा और समाधान। इसे नोट कर लें।

त्रुटि सामग्री

csv फ़ाइल को pd.read_csv के साथ पढ़ें।फिर...

पीडी डीएफ = पीडी.read_csv ('data.csv') के रूप में पांडा आयात करें

>> यूनिकोडडेकोडत्रुटि: 'utf-8' कोडेक बाइट 0x91 को स्थिति 1 में डिकोड नहीं कर सकता: अमान्य प्रारंभ बाइट

एक यूनिकोड डिकोडिंग (कैरेक्टर कोड को कैरेक्टर में कनवर्ट करना) त्रुटि हुई।
वैसे तो कैरेक्टर्स को कैरेक्टर कोड में बदलने को एनकोडिंग कहते हैं।

कारण

कंप्यूटर के अंदर, वर्णों को उनकी पहचान के रूप में नहीं पहचाना जाता है, लेकिन उन्हें पहले से अलग-अलग वर्णों को सौंपे गए नंबरों (वर्ण कोड) के रूप में संभाला जाता है।

भाषा के आधार पर और संख्याओं को कैसे निर्दिष्ट किया जाता है, वर्ण एन्कोडिंग के लिए कई विधियाँ हैं। UTF-8 यूनिकोड के लिए एन्कोडिंग विधियों में से एक है जिसे एक समान वैश्विक मानक के रूप में सेट किया गया है ताकि इसे किसी भी भाषा में उपयोग किया जा सके।
उस ने कहा, यूटीएफ -8 भी सही प्रतीत नहीं होता है (विकिपीडिया:जापानी वातावरण में यूनिकोड की समस्या)

मैं उस चरित्र को नहीं जानता जो समस्या का कारण बना, लेकिन csv फ़ाइल में जापानी वर्ण थे, इसलिए यूनिकोड डिकोडिंग त्रुटि जापानी वर्ण कोड और UTF-8 को अच्छी तरह से परिवर्तित करने में सक्षम नहीं होने के कारण हुई थी। ऐसा लगता है कि

उपाय

Read_csv() के साथ पढ़ते समय, एन्कोडिंग प्रारूप को तर्क से जापानी वर्ण कोड (जैसे शिफ्ट_जिस) के रूप में निर्दिष्ट करें।

df = pd.read_csv ('data.csv', एन्कोडिंग = 'shift_jis')

यह अब ठीक लोड हुआ।

जापानी के लिए अन्य एनकोडिंग प्रारूप

वैसे, कई वर्ण कोड हैं जो जापानी को व्यक्त कर सकते हैं, और पायथन मानक के रूप में निम्नलिखित को लागू करता है। ( संदर्भ:पायथन मानक एन्कोडिंग की सूची )

  • cp932
  • ईयूसी_जेपी, ईयूसी_जीआईएस_2004, ईयूसी_जीआईएसएक्स0213
  • iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
  • iso2022_jp_2004, iso2022_jp_2ext
  • शिफ्ट_जिस, शिफ्ट_जिस_2004, शिफ्ट_जिसक्स0213

हालाँकि, मुझे यह आभास है कि इसे शिफ्ट_जिस या cp932 के साथ अच्छी तरह से पढ़ा जा सकता है, जो कि ज्यादातर प्रमुख है।