Python और pandas में हिंदी टेक्स्ट की एन्कोडिंग ठीक करें

pandas हिंदी की जगह हिंदी पढ़ता है, UnicodeDecodeError देकर रुक जाता है, या एक्सपोर्ट की CSV Excel में गलत दिखती है? Python में encoding पैरामीटर तय करता है कि टेक्स्ट सही रहेगा या टूटेगा। यहाँ आम मामले हैं – और टूटी फ़ाइल आप ऊपर ब्राउज़र में ठीक कर सकते हैं।

टेक्स्ट और ये फ़ाइलें चलती हैं:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

जैसे Excel एक्सपोर्ट, डेटाबेस डंप, सबटाइटल या वेबसाइट का कोड।

ठीक करें

  1. फ़ाइल खींचकर लाएँ या टेक्स्ट पेस्ट करें
  2. अपने-आप ठीक हो जाता है
  3. कॉपी या डाउनलोड करें
या फ़ाइल यहाँ खींचकर लाएँ
  • कोई अपलोड नहीं। फ़ाइलें आपके ब्राउज़र में ही ठीक होती हैं और आपके डिवाइस से बाहर नहीं जातीं।

  • सर्वर EU में। Mojibuster फ़िनलैंड (EU) के एक सर्वर पर चलता है, इसलिए यूरोप का सामान्य डेटा संरक्षण विनियमन (GDPR) लागू होता है। GDPR पढ़ें (EUR-Lex, अंग्रेज़ी)

पढ़ते समय UnicodeDecodeError

pd.read_csv UTF-8 मानकर चलता है। फ़ाइल किसी और एन्कोडिंग में सेव हो तो pandas UnicodeDecodeError: 'utf-8' codec can't decode byte देकर रुकता है। पुरानी हिंदी फ़ाइलें अक्सर Windows-1252 (ANSI) में होती हैं, या Kruti Dev जैसे फ़ॉन्ट के अंग्रेज़ी अक्षरों में। तब एन्कोडिंग साफ़ बताएँ:

  • pd.read_csv('data.csv', encoding='cp1252') Excel और Windows की पुरानी फ़ाइलों के लिए।
  • encoding='latin-1' कभी फेल नहीं होता, पर € और टाइपोग्राफ़िक कोट गलत पढ़ता है – आमतौर पर cp1252 बेहतर है।
  • एन्कोडिंग पता न हो तो फ़ाइल Mojibuster में डालें: वह पहचानकर फ़ाइल UTF-8 में सेव कर देता है।

DataFrame में हिंदी की जगह ह

अगर DataFrame में हिंदी दिखता है, तो UTF-8 फ़ाइल latin-1 या cp1252 से पढ़ी गई – या डेटा पहले से टूटा था। पहले मामले में encoding='utf-8' काफ़ी है। डेटा खुद टूटा हो तो अकेले मान के लिए value.encode('cp1252').decode('utf-8') काम करता है, पर Windows-1252 में अपरिभाषित बाइट खो जाने पर यह फेल हो जाता है, और मिले-जुले डेटा में भी। आसान तरीका: पहले फ़ाइल Mojibuster से ठीक करें, फिर पढ़ें।

pandas की CSV, बिना BOM के Excel में खुली

पहले

uke 'kgj fcØh
jke 'kekZ fnYyh
lhrk nsoh t;iqj

बाद में

नाम शहर बिक्री
राम शर्मा दिल्ली
सीता देवी जयपुर

to_csv: Excel में फ़ाइल गलत दिखती है

df.to_csv('export.csv') बिना BOM का UTF-8 लिखता है। Excel ऐसी फ़ाइल ANSI मानकर खोलता है और हिंदी हिंदी बन जाती है। encoding='utf-8-sig' से pandas BOM लिखता है और Excel UTF-8 पहचान लेता है। विस्तार से: Excel और CSV में हिंदी फ़ॉन्ट की समस्या।

Windows पर open()

open('file.txt') बिना encoding के Windows पर सिस्टम एन्कोडिंग इस्तेमाल करता है, आमतौर पर cp1252। Linux पर चलने वाली स्क्रिप्ट Windows पर वही UTF-8 हिंदी फ़ाइल ह के रूप में पढ़ती है या त्रुटि देती है। इसलिए हमेशा encoding='utf-8' दें या पर्यावरण चर PYTHONUTF8=1 सेट करें। PEP 686 से आगे के Python में UTF-8 वैसे भी डिफ़ॉल्ट होगा।

requests से वेब डेटा

requests response.text को Content-Type हेडर से तय करता है। अगर टेक्स्ट जवाब में character set न लिखा हो, तो वह ISO-8859-1 मान लेता है और हिंदी UTF-8 पेज हिंदी दिखाते हैं। पहले response.encoding = 'utf-8' सेट करें, या response.json() इस्तेमाल करें जो UTF-8 खुद पहचानता है।

अगर टेक्स्ट errors='replace' के साथ ऐसी एन्कोडिंग में लिखा गया जिसमें देवनागरी नहीं है, तो फ़ाइल में ? है – तब जानकारी खो चुकी है, देखें मोजिबाके क्या है।

अक्सर पूछे जाने वाले सवाल

क्या इसके लिए Python लाइब्रेरी है?

हाँ, ftfy Python कोड में mojibake ठीक करती है। प्रोग्रामिंग के बिना अकेली फ़ाइल के लिए Mojibuster तेज़ है और सेव करने से पहले हर बदलाव दिखाता है।

मुझे सबसे ज़्यादा कौन-से encoding मान चाहिए?

utf-8, utf-8-sig (BOM वाला UTF-8), cp1252 (Windows, पश्चिमी यूरोप), latin-1 और utf-16। बड़े-छोटे अक्षर और हाइफ़न से फ़र्क नहीं पड़ता।

क्या डिलिमिटर और संख्याएँ बनी रहती हैं?

हाँ। Mojibuster सिर्फ़ टूटे अक्षर बदलता है। कॉमा, कोट और नई पंक्तियाँ जैसी थीं वैसी रहती हैं।

और गाइड