पहला मामला: फ़ाइल ठीक है, सिर्फ़ दिखाने में �
हिंदी के लिए कोई आम पुराना कोड पेज नहीं है, इसलिए यह मामला दूसरी भाषाओं से कम होता है। � तब दिखता है जब कोई प्रोग्राम फ़ाइल को गलत एन्कोडिंग से पढ़ता है या टेक्स्ट किसी अक्षर के बीच में कट जाता है। UTF-8 में हर हिंदी अक्षर तीन बाइट का होता है। अधूरे अक्षर को प्रोग्राम सिर्फ़ दिखाते समय � बना देता है। अगर दूसरा प्रोग्राम वही फ़ाइल सही दिखाता है, तो फ़ाइल में सही बाइट मौजूद हैं।
हल: मूल फ़ाइल ऊपर के बॉक्स में डालें। Mojibuster पढ़ते समय एन्कोडिंग पहचानता है और फ़ाइल UTF-8 में सहेजता है। ध्यान दें: फ़ाइल ही डालें, प्रोग्राम से टेक्स्ट कॉपी न करें – कॉपी करने पर � हमेशा के लिए रह जाता है।
दूसरा मामला: ? या � टेक्स्ट में ही सेव हो गए
अगर किसी प्रोग्राम ने टेक्स्ट ? या � के साथ सेव किया या आगे भेजा, तो मूल अक्षर खो गए। प्रोग्राम ? तब लगाते हैं जब कोई अक्षर लक्ष्य एन्कोडिंग में होता ही नहीं – और ASCII, latin1 या Windows-1252 में एक भी देवनागरी अक्षर नहीं है। इसलिए हिंदी में यह मामला बहुत आम है: पूरा शब्द ????? बन जाता है।
ऐसे अक्षर वापस नहीं लाए जा सकते, क्योंकि हर अक्षर एक ही चिह्न बन गया। Mojibuster अंदाज़ा नहीं लगाता, बल्कि बताता है कि कितनी जगहें प्रभावित हैं। मदद सिर्फ़ स्रोत से मिलेगी: एक्सपोर्ट दोबारा करें या बैकअप लें।
??? कहाँ से आते हैं
- MySQL: कॉलम या कनेक्शन
latin1में है, पर डेटा UTF-8 में आता है। तब MySQL हिंदी अक्षरों को?से बदल देता है – देखें MySQL और phpMyAdmin। - PHP वेबसाइट: डेटाबेस कनेक्शन
utf8mb4के बिना खोला गया, जैसे PDO DSN मेंcharset=utf8mb4नहीं है। तब फ़ॉर्म से आई हिंदी डेटाबेस में????बनकर पहुँचती है। - Excel: Save As में CSV UTF-8 (Comma delimited) चुनें। सामान्य CSV (Comma delimited) हिंदी नहीं रख सकता और हर अक्षर को
?बना देता है – देखें Excel और CSV में हिंदी। - PowerShell 5.1:
Export-Csvडिफ़ॉल्ट रूप से ASCII लिखता है और हिंदी को?कर देता है – देखें PowerShell। - Python:
encode('ascii', errors='replace')बिना बताए हर अक्षर को?बना देता है – देखें Python और pandas। - Notepad, Save As → ANSI: ANSI में देवनागरी नहीं है, इसलिए हिंदी
?बनकर सेव होती है। हमेशा UTF-8 चुनें। - Windows कंसोल: cmd जिन अक्षरों को नहीं जानता, उन्हें
?दिखाता है। अक्सर सिर्फ़ दिखाना गलत होता है, फ़ाइल नहीं।
आपका मामला कौन-सा है?
- फ़ाइल ऐसे एडिटर में खोलें जो एन्कोडिंग दिखाता है, जैसे Notepad++। अगर वहाँ हिंदी सही दिखती है, तो यह पहला मामला है।
- फ़ाइल Mojibuster में डालें। अगर हिंदी अक्षर लौट आए, तो फ़ाइल ठीक थी।
- अगर Mojibuster खोए हुए अक्षरों की सूचना देता है, तो यह दूसरा मामला है। तब सिर्फ़ नया एक्सपोर्ट मदद करेगा।
अगर ? की जगह हिंदी जैसे चिह्न दिखते हैं, तो यह दूसरी गलती है, और लगभग हमेशा ठीक हो जाती है: हिंदी फ़ॉन्ट की गड़बड़ ठीक करें। और अगर टेक्स्ट fganh जैसे अंग्रेज़ी अक्षरों में दिखता है, तो वह Kruti Dev फ़ॉन्ट में टाइप किया गया था – उसे Kruti Dev से यूनिकोड में बदलें। पूरी जानकारी: मोजिबाके क्या है।
अक्सर पूछे जाने वाले सवाल
क्या Mojibuster ??? को फिर से हिंदी बना सकता है?
नहीं। एक ? किसी भी अक्षर की जगह हो सकता है, जानकारी खो चुकी है। Mojibuster ऐसी जगहों को नहीं छूता, पर बताता है कि वे कितनी हैं।
एक प्रोग्राम में � दिखता है, दूसरे में सब ठीक – क्यों?
तब फ़ाइल ठीक है और सिर्फ़ एक प्रोग्राम उसे गलत एन्कोडिंग से पढ़ता है। Mojibuster से फ़ाइल UTF-8 में सहेजें, फिर दोनों प्रोग्राम उसे सही दिखाएँगे।
� चिह्न क्या है?
यह replacement character U+FFFD है। प्रोग्राम इसे तब लगाते हैं जब वे किसी बाइट को अक्षर के रूप में नहीं पढ़ पाते। यह एन्कोडिंग की गलती का संकेत है, टेक्स्ट का हिस्सा नहीं।