हिंदी टेक्स्ट फ़ाइल में अक्षर क्यों टूट जाते हैं

आप एक .txt फ़ाइल खोलते हैं और हिंदी की जगह बेमतलब चिह्न दिखते हैं। फ़ाइल ख़राब नहीं है। बाइट सब मौजूद हैं, बस ग़लत तालिका से पढ़े जा रहे हैं।

हिंदी में इसके दो अलग कारण होते हैं जो देखने में एक जैसे लगते हैं, और उनका हल बिल्कुल अलग है। पहले यह तय करना ज़रूरी है कि मामला कौन-सा है।

पहचान: कौन-सी समस्या है

फ़ाइल खोलकर देखिए कि जो चिह्न दिख रहे हैं वे किस तरह के हैं।

अगर अंग्रेज़ी के अक्षर और चिह्न दिख रहे हैं — जैसे fgUnh या Hkkjr — तो यह एन्कोडिंग की समस्या नहीं है। यह लीगेसी फ़ॉन्ट में टाइप किया गया पाठ है।

अगर अटपटे विदेशी चिह्न दिख रहे हैं जो किसी भाषा जैसे नहीं लगते, तो यह एन्कोडिंग की समस्या है।

लीगेसी फ़ॉन्ट वाली समस्या

यह हिंदी की अपनी समस्या है और यूनिकोड से पहले के दौर से आती है। कृतिदेव, चाणक्य, देवलिस और ऐसे कई फ़ॉन्ट देवनागरी दिखाते तो थे, पर फ़ाइल में सहेजते अंग्रेज़ी के बाइट ही थे। अक्षर तभी सही दिखते थे जब वही फ़ॉन्ट लगा हो।

इसका मतलब है कि फ़ाइल में हिंदी है ही नहीं। उसमें रोमन अक्षर हैं जिन्हें एक ख़ास फ़ॉन्ट देवनागरी की तरह चित्रित करता था।

इसीलिए यहाँ एन्कोडिंग बदलने से कुछ नहीं होता, और iconv जैसे औज़ार काम नहीं आते: वे अक्षर-समुच्चय बदलते हैं, फ़ॉन्ट-मानचित्र नहीं।

हल: कृतिदेव-से-यूनिकोड कन्वर्टर चाहिए। ये ऑनलाइन उपलब्ध हैं और हर फ़ॉन्ट के लिए अलग होते हैं, क्योंकि हर फ़ॉन्ट की अपनी मैपिंग थी। पहले यह पता करना पड़ता है कि पाठ किस फ़ॉन्ट में टाइप हुआ था — पुरानी सरकारी और पत्रकारिता की सामग्री में अक्सर कृतिदेव मिलता है।

असली एन्कोडिंग वाली समस्या

अगर पाठ यूनिकोड में ही है पर ग़लत तालिका से पढ़ा जा रहा है, तो मामला वही है जो हर भाषा में होता है।

एन्कोडिंगकहाँ मिलता है
UTF-8आज का मानक, सभी लिपियाँ
UTF-16कुछ विंडोज प्रोग्राम से निर्यात
ISCIIयूनिकोड से पहले का भारतीय मानक, अब दुर्लभ

ऐप क्या करता है

साफ़ कह देना बेहतर है: Aurora Reader पहले UTF-8 आज़माता है, विफल होने पर Latin-1 पर लौट जाता है। न ISCII पहचानता है, न सेटिंग्स में एन्कोडिंग चुनने का विकल्प है।

Latin-1 ही यह भी समझाता है कि त्रुटि-संदेश के बजाय टूटे अक्षर क्यों दिखते हैं: उस एन्कोडिंग में हर बाइट का कोई न कोई अर्थ निकल आता है, इसलिए वैकल्पिक रास्ता हमेशा «सफल» होता है — बस ग़लत पाठ देता है।

यह व्यवहार बग के रूप में दर्ज है

हल: कंप्यूटर पर प्रतिलिपि खोलकर सही स्रोत एन्कोडिंग चुनें और UTF-8 में सहेजें:

iconv -f UTF-16 -t UTF-8 kitab.txt > kitab-utf8.txt

हमेशा प्रतिलिपि पर काम करें।

संयुक्ताक्षर टूटे दिखें तो

एक तीसरी स्थिति भी है: पाठ सही है, पर «क्ष», «त्र», «ज्ञ» जैसे संयुक्ताक्षर अलग-अलग टुकड़ों में दिख रहे हैं, या मात्राएँ ग़लत जगह बैठी हैं।

यह न एन्कोडिंग है न फ़ाइल की ख़राबी, बल्कि फ़ॉन्ट की कमी है। जिस फ़ॉन्ट में देवनागरी के संयुक्त रूप नहीं होते, वह अक्षरों को जोड़ नहीं पाता। हल अपना फ़ॉन्ट जोड़ना है।

यह फ़ाइल की ख़राबी नहीं है

ख़राब फ़ाइल आमतौर पर खुलती ही नहीं, या बीच में रुक जाती है। पूरी किताब लगातार ग़लत अक्षरों में दिखे तो बाइट सही-सलामत हैं। अंतर ख़राब फ़ाइल पहचानना में है।

नाम बदलने से कुछ नहीं होता, क्योंकि एक्सटेंशन का बाइट से कोई सम्बन्ध नहीं।

दोबारा न हो इसके लिए

वही किताब EPUB में मिले तो वही लें। EPUB अपनी एन्कोडिंग फ़ाइल के भीतर घोषित करता है, इसलिए यह समस्या पैदा ही नहीं होती। विकिस्रोत से EPUB निर्यात इसी कारण सुविधाजनक है।

सभी लेख