मेरा मानना है कि अच्छा लेख का एक बहुत देखते हैं इस बारे में वेब के आसपास, लेकिन यहां एक संक्षिप्त सारांश है।
यूटीएफ -8 और यूटीएफ -16 दोनों परिवर्तनीय लंबाई एन्कोडिंग हैं। हालांकि, यूटीएफ -8 में एक चरित्र कम से कम 8 बिट्स पर कब्जा कर सकता है, जबकि यूटीएफ -16 में वर्ण की लंबाई 16 बिट्स के साथ शुरू होती है।
मुख्य UTF-8 पेशेवरों:
- अंक जैसी बुनियादी ASCII वर्ण, कोई लहजे के साथ लैटिन वर्णों, आदि एक बाइट जो US-ASCII प्रतिनिधित्व करने के लिए समान है पर कब्जा। इस तरह सभी यूएस-एएससीआईआई स्ट्रिंग वैध यूटीएफ -8 बन जाते हैं, जो कई मामलों में सभ्य पिछड़ा संगतता प्रदान करता है।
- कोई शून्य बाइट्स, जो शून्य-समाप्त तारों का उपयोग करने की अनुमति देता है, यह भी पीछे की संगतता का एक बड़ा सौदा पेश करता है।
- यूटीएफ -8 बाइट ऑर्डर से स्वतंत्र है, इसलिए आपको बिग एंडियन/लिटिल एंडियन मुद्दे के बारे में चिंता करने की ज़रूरत नहीं है।
मुख्य UTF-8 विपक्ष:
- कई आम पात्रों अलग लंबाई, जो कोडपॉइंट और गणना एक कोडपॉइंट बहुत गिनती द्वारा अनुक्रमण धीमा कर देती है।
- भले ही बाइट ऑर्डर कोई फर्क नहीं पड़ता, फिर भी यूटीएफ -8 में अभी भी बीओएम (बाइट ऑर्डर मार्क) है जो यह सूचित करता है कि टेक्स्ट यूटीएफ -8 में एन्कोड किया गया है, और एएससीआईआई सॉफ्टवेयर के साथ संगतता भी तोड़ता है भले ही पाठ केवल ASCII वर्ण शामिल हैं। माइक्रोसॉफ्ट सॉफ्टवेयर (नोटपैड की तरह) विशेष रूप से बीओएम को यूटीएफ -8 में जोड़ना पसंद करता है।
मुख्य UTF-16 के पेशेवरों:
- बीएमपी (बेसिक बहुभाषी विमान) वर्ण, लैटिन, सिरिलिक, अधिकांश चीनी सहित (पीआरसी बीएमपी अनिवार्य बाहर कुछ कोड पॉइंट्स के लिए समर्थन किया जाता है), सबसे जापानी हो सकता है 2 बाइट्स के साथ प्रतिनिधित्व किया।यह में पूरक वर्ण होने पर टेक्स्ट इंडेक्सिंग और कोडपॉइंट गिनती की गणना करता है।
- भले ही पाठ में पूरक वर्ण हों, फिर भी उन्हें 16-बिट मानों के जोड़े द्वारा दर्शाया जाता है, जिसका अर्थ है कि कुल लंबाई अभी भी दो से विभाजित है और स्ट्रिंग के आदिम घटक के रूप में 16-बिट
char
का उपयोग करने की अनुमति देती है।
मुख्य UTF-16 के विपक्ष: US-ASCII तार, जो कोई अशक्त-समाप्त तार और व्यर्थ स्मृति का एक बहुत मायने रखती है में अशक्त बाइट्स की
- बहुत सारे।
- इसे कई सामान्य परिदृश्यों (विशेष रूप से यूएस/ईयू/साइरिलिक अल्फाबेट्स/इज़राइल/अरब देशों/ईरान और कई अन्य देशों वाले देशों) में एक निश्चित-लंबाई एन्कोडिंग "ज्यादातर काम करता है" के रूप में उपयोग करना, अक्सर टूटा समर्थन होता है जहां यह नहीं करता है 'टी। इसका मतलब है कि प्रोग्रामर को सरोगेट जोड़े से अवगत होना चाहिए और उन मामलों में उन्हें ठीक से संभालना होगा जहां यह महत्वपूर्ण है!
- यह चर की लंबाई है, तो गणना या इंडेक्सिंग कोडपॉइंट महंगा है, हालांकि यूटीएफ -8 से कम है।
सामान्य तौर पर, UTF-16 के आम तौर पर इन-स्मृति प्रतिनिधित्व के लिए बेहतर है क्योंकि बीई/ले वहाँ अप्रासंगिक है (बस देशी आदेश का उपयोग करें) और अनुक्रमण तेजी से होता है (बस किराए की जोड़े ठीक से संभाल मत भूलना)। दूसरी तरफ, यूटीएफ -8, पाठ फ़ाइलों और नेटवर्क प्रोटोकॉल के लिए बेहद अच्छा है क्योंकि कोई बीई/ली मुद्दा नहीं है और निरंतर समाप्ति अक्सर काम में आती है, साथ ही एएससीआईआईआई-संगतता भी होती है।
स्रोत
2011-01-11 07:50:03
जॉन स्कीट एन्कोडिंग .... http पर एक अच्छा लेख है: //csharpindepth.com/Articles/General/Unicode.aspx –