यूनिकोड, यूनिकोड बिग एंडियन या यूटीएफ -8? अंतर क्या है? कौन सा प्रारूप बेहतर है?


19

जब मैं नोटपैड में गैर-अंग्रेजी पाठ के साथ एक पाठ फ़ाइल को बचाने की कोशिश करता हूं, तो मुझे यूनिकोड , यूनिकोड बिग एंडियन और यूटीएफ -8 के बीच चयन करने का विकल्प मिलता है । इन स्वरूपों में क्या अंतर है?

मान लिया जाये कि मैं नहीं (पुराने OS संस्करण या एप्लिकेशन से) किसी भी पश्चगामी संगतता चाहते हैं और मैं नहीं फ़ाइल आकार, जो इन स्वरूपों में से बेहतर है के बारे में परवाह?

(मान लें कि पाठ अन्य भाषाओं के अलावा, चीनी या जापानी जैसी भाषाओं में भी हो सकता है।)

नोट: नीचे दिए गए उत्तरों और टिप्पणियों से ऐसा लगता है कि नोटपैड लिंगो में, यूनिकोड UTF-16 (लिटिल एंडियन) है, यूनिकोड बिग एंडियन UTF-16 (बिग एंडियन) और UTF-8 अच्छी तरह से UTF-8 है।


जवाबों:


19

पता नहीं। कौन सा बेहतर है: एक आरा या एक हथौड़ा? :-)

यूनिकोड यूटीएफ नहीं है

लेख में थोड़ा सा है जो हाथ में विषय के लिए थोड़ा अधिक प्रासंगिक है:

  • UTF-8 ASCII सेट से वर्णों के प्रतिनिधित्व के लिए बाइट के आकार को कम करने पर केंद्रित है (चर लंबाई प्रतिनिधित्व: प्रत्येक वर्ण 1 से 4 बाइट्स पर दर्शाया गया है, और ASCII वर्ण सभी 1 बाइट पर फिट हैं)। जैसा कि जोएल इसे कहते हैं:

"उन सभी शून्य को देखो!" उन्होंने कहा, चूंकि वे अमेरिकी थे और वे अंग्रेजी पाठ को देख रहे थे जो शायद ही कभी यू + 00 एफएफ के ऊपर कोड बिंदुओं का उपयोग करते थे। इसके अलावा वे कैलिफोर्निया में उदार हिप्पी थे जो संरक्षण करना चाहते थे (स्नेहक)। यदि वे टेक्सान थे, तो उन्होंने बाइट्स की संख्या से दोगुना होने का विचार नहीं किया होगा। लेकिन उन कैलिफ़ोर्निया विम्प्स ने स्ट्रिंग्स के लिए ली गई भंडारण की मात्रा को दोगुना करने के विचार को सहन नहीं किया

  • UTF-32 सभी वर्णों के लिए 4 बाइट्स का उपयोग करते हुए थकावट और निश्चित लंबाई के प्रतिनिधित्व पर केंद्रित है। यह सबसे सीधा अनुवाद है, जो यूनिकोड कोड-पॉइंट को सीधे 4 बाइट पर मैप करता है। जाहिर है, यह बहुत आकार-कुशल नहीं है।

  • UTF-16 एक समझौता है, जो कि ज्यादातर समय 2 बाइट्स का उपयोग करता है, लेकिन कुछ चरित्रों का प्रतिनिधित्व करने के लिए प्रति चरित्र 2 से 2 बाइट्स तक विस्तारित होता है, जिन्हें बेसिक मल्टीलिंगुअल प्लेन (बीएमपी) में शामिल नहीं किया जाता है।

यह भी देखें निरपेक्ष न्यूनतम हर सॉफ्टवेयर डेवलपर बिल्कुल, सकारात्मक यूनिकोड और चरित्र सेट के बारे में पता होना चाहिए (कोई Excuses!)


4
समस्या इस तथ्य से आती है कि यूनिकोड एक 'एन्कोडिंग' है, लेकिन संख्या-बाइट्स अर्थों में नहीं। यूटीएफ -8 / 16/32 सभी यूनिकोड एनकोडिंग हैं, लेकिन यूनिकोड स्वयं प्रतीकों से संख्याओं तक एक मानचित्रण है। मुझे लगता है कि इस भ्रम से बचने के लिए वे और अधिक अद्वितीय शब्दावली का उपयोग कर सकते थे।
jerryjvl

4
भले ही, सवाल के ओपी के लिए, संभावनाएं हैं कि आवेदन का मतलब 'यूटीएफ -16' है जहां यह 'यूनीकोड' कहता है।
jerjvl

3
मुझे यकीन नहीं है कि UTF-8 का लक्ष्य ASCII के साथ पीछे की अनुकूलता के विपरीत "संरक्षण" है।
मिस्टर शाइनी और न्यू 宇

@ जोहान्स: यूनिकोड कंसोर्टियम ने कभी भी U + 10FFFF से ऊपर कोड पॉइंट असाइन नहीं करने का फैसला किया है क्योंकि उन्हें UTF-16 में प्रतिनिधित्व नहीं किया जा सकता है। इसमें UTF-8 से 4 बाइट्स को प्रतिबंधित करने का प्रभाव था।
user46971

1
"यूनिकोड यूटीएफ नहीं है" - कई लोगों के लिए, यह डब्ल्यूटीएफ है;)
एमएलवीएलआरआर

4

यूरोपीय भाषाओं के लिए, UTF-8 छोटा है। ओरिएंटल भाषाओं के लिए, अंतर इतना स्पष्ट नहीं है।

दोनों सभी संभव यूनिकोड वर्णों को संभालेंगे, इसलिए इसे संगतता में कोई अंतर नहीं करना चाहिए।


3

आपके विचार से अधिक यूनिकोड वर्ण एन्कोडिंग हैं।

  • UTF 8

    UTF-8 एन्कोडिंग चर-चौड़ाई है, 1-4 बाइट्स से लेकर, प्रत्येक बाइट के ऊपरी बिट्स नियंत्रण बिट्स के रूप में आरक्षित हैं। पहले बाइट के प्रमुख बिट्स उस चरित्र के लिए उपयोग किए जाने वाले बाइट्स की कुल संख्या को इंगित करते हैं। किसी वर्ण के कोड बिंदु का अदिश मान गैर-नियंत्रण बिट्स का संघटन होता है। इस तालिका में, xयूनिकोड मान के सबसे कम 8 बिट्स का yप्रतिनिधित्व करता है, अगले उच्च 8 बिट्स का zप्रतिनिधित्व करता है , और बिट्स की तुलना में अधिक का प्रतिनिधित्व करता है।

    Unicode              Byte1     Byte2     Byte3     Byte4
    U+0000-U+007F       0xxxxxxx            
    U+0080-U+07FF       110yyyxx  10xxxxxx          
    U+0800-U+FFFF       1110yyyy  10yyyyxx  10xxxxxx    
    U+10000-U+10FFFF    11110zzz  10zzyyyy  10yyyyxx  10xxxxxx
    
  • यूसीएस -16
  • यूसीएस 16BE
  • यूसीएस-16LE

  • UTF-16
  • UTF-16BE
  • UTF-16LE

  • UTF-32
  • UTF-32-BE

1
आपके द्वारा सूचीबद्ध से अधिक यूनिकोड वर्ण एन्कोडिंग हैं। उदाहरण के लिए UTF-1 , UTF-7 , UTF-EBCDIC , GB-18030 , MIME , UTF-9 और UTF-18 ... आप यूनिकोड डेटा को एनकोड करने के लिए किसी भी द्विआधारी एन्कोडिंग योजना का भी उपयोग कर सकते हैं। और अधिक पढ़ें यूनिकोड एनकोडिंग की तुलना
phuclv

1

"यूनिकोड" "यूटीएफ -16" के लिए एक और शब्द है, जो कि यूनिकोड चरित्र के सोलह-बिट्स प्रति वर्ण में एन्कोडिंग है। UTF-8 इसे आठ बिट प्रति वर्ण में एन्कोड करता है।

दोनों ही मामलों में, किसी भी अतिप्रवाह को अन्य 16 या आठ बिट्स के लिए आवंटित किया जाता है।


फिर कौन सा बेहतर है?
आर। मार्टिनो फर्नांडिस

"यह स्थिति पर निर्भर करता है।
जॉन साउंडर्स

हालांकि इस विशिष्ट प्रश्न के लिए ऐसा लगता है कि "यूनिकोड" वास्तव में "UTF-16" के लिए एक और शब्द के रूप में ABUSED है, यह सामान्य रूप से ऐसा नहीं है - जेसन का जवाब देखें।
अरजन

1
आपका मतलब "प्रति कोड इकाई" है, "प्रति चरित्र" नहीं; UTF-8 और UTF-16 दोनों एक वर्ण का प्रतिनिधित्व करने के लिए कई कोड इकाइयों का उपयोग कर सकते हैं। और "यूनिकोड" एक "UTF-16" Microsoft शब्दावली को छोड़कर, एक ही बात नहीं है।
user46971

1

पाठ फ़ाइलों जैसी छोटी फ़ाइलों के साथ एकमात्र वास्तविक लाभ परिणामी फ़ाइल आकार है। UTF-8 आम तौर पर छोटी फ़ाइलों का उत्पादन करता है। लेकिन यह अंतर चीनी / जापानी पाठ के साथ कम स्पष्ट हो सकता है।


ध्यान रखें कि नेटवर्क बैंडविड्थ और मेमोरी उपयोग में भी अंतर है।
जेसन बेकर

1
"UTF-8 आम तौर पर छोटी फ़ाइलों का उत्पादन करता है": आम तौर पर नहीं। UTF-8 ASCII फ़ाइलों के लिए छोटी फ़ाइलों का उत्पादन करता है। यदि किसी फाइल में केवल U + 0800 के ऊपर यूनिकोड कोड पॉइंट होते हैं, तो यह UTF-16 की तुलना में UTF-8 में बड़ा होगा ।
सालेस्के 12

0

एक शब्द में, यूनिकोड एक कैरेक्टर सेट है , जबकि यूनिकोड बिग एंडियन और यूटीएफ -8 दो एनकोडिंग हैं , जिनका उपयोग कंप्यूटर पर 01 के रूप में वर्णों को संग्रहीत करने के लिए किया जाता है।


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