विंडोज 7 यूटीएफ -8 और यूनिकोड


14

क्या कोई बता सकता है कि विंडोज 7 (प्रो 64-बिट) में क्या बदलाव आया है?

विवरण: पहले मेरे पास विंडोज़ एक्सपी था और सीएसवी प्रारूप में कुछ अनुवाद फाइलें (UTF-8 एनकोडेड) थीं। मैं नोटपैड और एक्सेल दोनों में फोंट देखने में सक्षम था। विंडोज 7 में अपग्रेड करने के बाद, जब मैं इन फ़ाइलों को खोलता हूं - तो मुझे जो भी दिखाई देता है वह चौकोर बक्से हैं (बस आप जानते हैं, अगर मैं उन्हें ब्राउज़र में खोलता हूं - मैं सभी अनुवाद देख पा रहा था)। अगर मैं उन फ़ाइलों को यूनिकोड में सहेजता हूं, तो सब कुछ ठीक लगता है।

तो, वास्तव में क्या चल रहा है? यूनिकोड के साथ विंडोज 7 क्यों काम करता है और UTF-8 के साथ नहीं है?

जवाबों:


30

यूनिकोड के साथ विंडोज 7 क्यों काम करता है और UTF-8 के साथ नहीं है?

शब्दावली

यूनिकोड और यूटीएफ -8 एक ही तरह की चीज नहीं हैं: यूनिकोड एक ऐसा चरित्र-समुच्चय है जो वर्णों के एक समूह (एक प्रदर्शनों की सूची) को परिभाषित करता है और उन प्रत्येक वर्णों को संख्या (कोड अंक) प्रदान करता है। UTF can 8 कई एनकोडिंग में से एक है जिसका उपयोग डिस्क पर या ट्रांसमिशन में यूनिकोड वर्णों की एक धारा का प्रतिनिधित्व करने के लिए किया जा सकता है । उदाहरण के लिए यूनिकोड वर्णों की समान धारा को UTF UT 16, UTF or 32 या UTF। 7 के रूप में भी एन्कोड किया जा सकता है।

हालांकि, नोटपैड आपको "एन्कोडिंग" विकल्प प्रदान करता है ANSI, जिसमें शामिल हैं Unicode, Unicode big-endianऔर UTF-8। इसे लिखने वाले Microsoft डेवलपर्स ने गलत शब्दों का इस्तेमाल किया है। जब वे "यूनिकोड" कहते हैं, तो उनका मतलब " यूटीएफ -16 लिटिल-एंडियन " होता है। जब वे "एएनएसआई" कहते हैं तो उनका मतलब कोड पेज 1252 (सीपी -1252) होता है।

Microsoft नोटपैड

मेरा मानना ​​है कि माइक्रोसॉफ्ट का नोटपैड यूटीएफ -16 को बाइट ऑर्डर मार्क ( बीओएम ) के साथ लिखता है और यह कि नोटपैड टेक्स्ट फाइल को पढ़ते समय BOM की तलाश करता है। BOM ऐप को बताता है कि फ़ाइल UTF-16 है और यह इंगित करता है कि यह बड़ा-एंडियन है या छोटा-एंडियन है।

यदि नोटपैड को बीओएम नहीं मिलता है, तो यह एक लाइब्रेरी फ़ंक्शन को कॉल करता है IsTextUnicode, जो डेटा को देखता है और यह अनुमान लगाने का प्रयास करता है कि एन्कोडिंग का उपयोग क्या किया गया था। कभी-कभी (अनिवार्य रूप से) यह गलत अनुमान लगाता है। कभी-कभी यह अनुमान लगाता है कि "एएनएसआई" फ़ाइल "यूनिकोड" है। कोड पृष्ठ 1252 के रूप में UTF-16 या UTF-8 फ़ाइल की व्याख्या करने की कोशिश करने से यह गलत ग्लिफ़ को प्रदर्शित करने का कारण होगा और कुछ 8-बिट मानों को प्रस्तुत करने के लिए ग्लिफ़ खोजने में असमर्थ होगा - ये तब वर्ग के रूप में दिखाए जाएंगे।

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

बाइट ऑर्डर मार्क्स

यूनिकोड संघ के अनुसार, बाइट ऑर्डर मार्क्स (BOMs) वैकल्पिक हैं। हालाँकि, Windows कुछ एनकोडिंग के बीच अंतर करने के लिए BOMs पर निर्भर करता है।

तो संक्षेप में, शायद आपकी फ़ाइलों में किसी कारण से बीओएम की कमी थी? हो सकता है कि अपग्रेड प्रक्रिया के दौरान कुछ समय पहले बीओएम खो गया हो?

यदि आपके पास अभी भी मूल फाइलें हैं जो चौकों के रूप में दिखाई देती हैं, तो आप उन्हें हेम डंप कर सकते हैं यह देखने के लिए कि क्या उनके पास एक बीओएम है।


सादा पाठ फ़ाइल मानक

समस्या यह है कि सादे पाठ फ़ाइलों के लिए प्रभावी रूप से कोई भी - कोई सार्वभौमिक मानक नहीं हैं। इसके बजाय हमारे पास कई असंगत और अज्ञात व्यक्ति हैं।

  • लाइन-एंडिंग्स को कैसे चिह्नित किया गया है? कुछ प्लेटफॉर्म नियंत्रण-वर्ण कैरिज रिटर्न (सीआर) का उपयोग करते हैं, उसके बाद लाइन फीड (एलएफ), कुछ अकेले सीआर का उपयोग करते हैं और कुछ अकेले एलएफ का उपयोग करते हैं।

  • क्या उपरोक्त टर्मिनेटर या विभाजक हैं? यह एक फ़ाइल के अंत में एक प्रभाव है और समस्याओं का कारण ज्ञात किया गया है।

  • टैब और अन्य नियंत्रण पात्रों का उपचार। हम मान सकते हैं कि पंक्ति के प्रारंभ से 8 मानक वर्ण चौड़ाई के कई को संरेखित करने के लिए एक टैब का उपयोग किया जाता है, लेकिन वास्तव में इसके लिए कोई निश्चितता नहीं है। कई कार्यक्रम टैब स्थिति को बदलने की अनुमति देते हैं।

  • चरित्र सेट और एन्कोडिंग? फ़ाइल में पाठ के लिए इनमें से कौन सा उपयोग किया गया है, यह इंगित करने के लिए कोई सार्वभौमिक मानक नहीं है। निकटतम हमारे पास एक बीओएम की उपस्थिति को देखना है जो इंगित करता है कि एन्कोडिंग यूनिकोड के लिए उपयोग किए जाने वालों में से एक है। BOM मान से फ़ाइल को पढ़ने वाले प्रोग्राम UTF-8 और UTF-16, आदि के बीच अंतर कर सकते हैं, और UTF-16 के लिटिल-एंडियन और बिग-एंडियन वेरिएंट के बीच, आदि यह संकेत देने के लिए कोई सार्वभौमिक मानक नहीं है कि फ़ाइल CP-1252 या KOI-8 जैसे किसी अन्य लोकप्रिय एन्कोडिंग में एन्कोड किया गया है।

और इसी तरह। उपरोक्त मेटाडेटा में से कोई भी पाठ फ़ाइल में नहीं लिखा गया है - इसलिए अंतिम-उपयोगकर्ता को फ़ाइल को पढ़ते समय कार्यक्रम को सूचित करना चाहिए। एंड-यूज़र को किसी भी विशिष्ट फ़ाइल के लिए मेटाडेटा मानों को जानना होगा या जोखिम को चलाना होगा कि उनका प्रोग्राम गलत मेटाडेटा मानों का उपयोग करेगा।

झाड़ियों ने तथ्य छुपा लिए

Windows XP पर यह प्रयास करें।

  • नोटपैड खोलें।
  • फ़ॉन्ट को एरियल यूनिकोड एमएस पर सेट करें। (आपको इसे पहले इंस्टॉल करने की आवश्यकता हो सकती है; यदि आप इसे मेनू में नहीं देखते हैं, तो "अधिक फ़ॉन्‍ट दिखाएं" पर क्लिक करें।)
  • "बुश ने तथ्यों को छिपाया" पाठ दर्ज करें।
  • चुनें Save As। से Encodingमेनू, चयन ANSI
  • नोटपैड को बंद करें।
  • दस्तावेज़ को फिर से खोलें (जैसे, का उपयोग करते हुए Start, My Recent Documents)।
  • आप "बुश ने तथ्यों को छिपाया" के बजाय will 桳 畂 畂 畂 畂 畂 畂 畂 देखेंगे।

यह दिखाता है कि IsTextUnicodeनोटपैड द्वारा उपयोग किए गए फ़ंक्शन गलत अनुमान लगाते हैं कि एएनएसआई (वास्तव में कोड पृष्ठ 1252) पाठ यूनिकोड यूटीएफ -16 ईएलएल बिना बीओएम है। के रूप में सहेजी गई फ़ाइल में कोई BOM नहीं है ANSI

विंडोज 7

विंडोज 7 के साथ, माइक्रोसॉफ्ट ने समायोजित किया IsTextUnicodeताकि ऊपर ऐसा न हो। BOM के अभाव में, अब यूनिकोड (UTF-16LE) की तुलना में ANSI (CP 1252) का अनुमान लगाना अधिक संभव है। विंडोज -7 के साथ मुझे उम्मीद है कि आप रिवर्स समस्या होने की अधिक संभावना रखते हैं: एक फाइल जिसमें यूनिकोड वर्णों की संख्या 255 से अधिक होती है, लेकिन बिना बीओएम के, अब एएनएसआई होने का अनुमान लगाया जा सकता है - और इसलिए इसे गलत तरीके से प्रदर्शित किया जाता है।

एन्कोडिंग समस्याओं को रोकना

वर्तमान में, सबसे अच्छा तरीका हर जगह UTF-8 का उपयोग करना प्रतीत होता है। आदर्श रूप से आप सभी पुरानी पाठ फ़ाइलों को UTF-8 में फिर से एनकोड करेंगे और केवल पाठ फ़ाइलों को UTF-8 के रूप में सहेजेंगे। ऐसे उपकरण हैं जैसे कि recode और iconv जो इसकी मदद कर सकते हैं।


3
विकिपीडिया के अनुसार : विंडोज विस्टा और विंडोज 7 में [..] IsTextUnicode को बदलकर UTF-16LE के बजाय बाइट-आधारित एन्कोडिंग का अनुमान लगाने की अधिक संभावना है।
अर्जन

हां, यह सुनिश्चित करने के लिए कि उन फ़ाइलों में BOM है क्योंकि हम BOM के साथ उन फ़ाइल को जेनरेट करते हैं। यह दिलचस्प है कि विंडोज 7 पुराने ओएस द्वारा बनाए गए बीओएम को नहीं पढ़ता है।
शा ले

BOM नहीं बदला है। यह हो सकता है कि आपकी फाइलें BOM को याद कर रही हों, लेकिन पहले डिफ़ॉल्ट प्रारूप कुछ यूनिकोड संस्करण था, जहां अब यह CII है। मेरा जवाब देखिए।
harrymc

@ शां ले: यदि फ़ाइल में बीओएम है, तो विंडोज 7 नोटपैड को इसे सही ढंग से खोलना चाहिए, इसलिए आपके द्वारा बताई गई समस्या ज्ञात मुद्दों के साथ फिट नहीं होती है isTextUnicode। क्या आप एक छोटी सी नमूना फ़ाइल बना सकते हैं जो उस समस्या के बारे में बताए जो आपके पास एक बीओएम फ़ाइल के साथ है?
RedGrittyBrick

this app can breakउसी प्रभाव के लिए भी हैBush hid the facts
रीजेंट

3

एक टिप्पणी: आप एन्कोडिंग मेनू का उपयोग करते हुए, थीस फ़ाइलों को देखने के लिए नोटपैड ++ का उपयोग कर सकते हैं ।

एक बार फ़ाइलों को सही ढंग से प्रदर्शित होने के बाद, उन्हें सहेजने से सही BOM जुड़ जाएगा।


मुझे पता है कि यह पोस्ट थोड़ी पुरानी है, लेकिन मेरे पास वर्तमान में जीत 7 के साथ है और नोटपैड ++ ने बिना बीओएम के बिना यूटीएफ 8 को प्रदर्शित नहीं किया है जब फाइलें शुरू में नोटपैड ++ v5.9.6.2 का उपयोग करके बनाई गई थीं।
जेक

@ जेक: सुनिश्चित करें कि एन्कोडिंग मेनू "UTF8 में एनकोड" दिखाता है, बजाय "बिना बॉम के UTF8 में एनकोड"।
13

1

विंडोज 10 में संभव है (1903 बिल्ड पर परीक्षण)

  1. अच्छा एन्कोडिंग के साथ अपनी फ़ाइल को कॉपी TXTUTF-8.txtकरने के लिए C:\WINDOWS\SHELLNEW
  2. में HKEY_CLASSES_ROOT\.txt\ShellNewनाम के साथ एक नई श्रृंखला बनाने के " FileName"
  3. " FileName" से " TXTUTF-8.txt" का मान बदलें

अब जब आप विंडोज मेनू का उपयोग करके एक नई txt फ़ाइल बनाते हैं, तो यह आपके TXTUTF-8.txtटेम्पलेट के रूप में ले जाएगा

स्रोत: https://answers.microsoft.com/fr-fr/windows/forum/all/configurer-lencodage-par-d%C3%A9faut-en-utf-8-dans/9c3358ca-a2b3-43e8-a154-a d10c1fe94317

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.