यूनिकोड, यूटीएफ, एएससीआईआई, एएनएसआई प्रारूप अंतर


351

बीच क्या अंतर है Unicode, UTF8, UTF7, UTF16, UTF32, ASCII, और ANSIएन्कोडिंग?

प्रोग्रामर्स के लिए ये किस तरह से मददगार हैं?


संदर्भित करने के लिए सबसे अच्छी साइट होगी: msdn.microsoft.com/en-us/library/dd374081(VS.85).aspx
RamSri



जवाबों:


470

आपकी सूची नीचे जा रही है:

  • " यूनिकोड " एक एन्कोडिंग नहीं है, हालांकि दुर्भाग्य से, प्रलेखन का एक बहुत कुछ यूनिकोड एन्कोडिंग को संदर्भित करने के लिए इसका उपयोग करता है जो कि विशेष प्रणाली डिफ़ॉल्ट रूप से उपयोग करता है। विंडोज और जावा पर, इसका मतलब अक्सर UTF-16 होता है; कई अन्य स्थानों पर, इसका मतलब UTF-8 है। उचित रूप से, यूनिकोड किसी विशेष एन्कोडिंग के लिए नहीं, बल्कि स्वयं निर्धारित अमूर्त चरित्र को संदर्भित करता है।
  • UTF-16 : 2 बाइट्स प्रति "कोड यूनिट"। यह .NET में स्ट्रिंग्स का मूल प्रारूप है, और आम तौर पर विंडोज और जावा में। बेसिक मल्टीलिंगुअल प्लेन (BMP) के बाहर के मूल्यों को सरोगेट जोड़े के रूप में एन्कोड किया गया है। इनका उपयोग अपेक्षाकृत कम ही किया जाता था, लेकिन अब कई उपभोक्ता अनुप्रयोगों को इमोजीस का समर्थन करने के लिए गैर-बीएमपी वर्णों के बारे में पता होना चाहिए।
  • UTF-8 : चर लंबाई एन्कोडिंग, प्रति कोड बिंदु 1-4 बाइट्स। ASCII मान 1 बाइट का उपयोग करके ASCII के रूप में एन्कोड किए गए हैं।
  • UTF-7 : आमतौर पर मेल एन्कोडिंग के लिए उपयोग किया जाता है। संभावना है कि अगर आपको लगता है कि आपको इसकी आवश्यकता है और आप मेल नहीं कर रहे हैं, तो आप गलत हैं। (यह सिर्फ समाचार-समूहों आदि में पोस्ट करने वाले लोगों का मेरा अनुभव है - बाहर की मेल, यह वास्तव में व्यापक रूप से उपयोग नहीं किया गया है।)
  • UTF-32 : कोड बिंदु प्रति 4 बाइट्स का उपयोग करके निश्चित चौड़ाई वाली एन्कोडिंग। यह बहुत कुशल नहीं है, लेकिन बीएमपी के बाहर जीवन को आसान बनाता है। मेरे पास Utf32Stringमेरे MiscUtil लाइब्रेरी के हिस्से के रूप में .NET क्लास है , क्या आपको कभी ऐसा चाहिए। (यह बहुत अच्छी तरह से परीक्षण नहीं किया गया है, आप पर ध्यान दें।)
  • ASCII : सिंगल बाइट एन्कोडिंग केवल 7 बिट्स का उपयोग करके। (यूनिकोड कोड 0-127 अंक।) कोई उच्चारण आदि नहीं।
  • ANSI: कोई भी निश्चित ANSI एन्कोडिंग नहीं है - उनमें से बहुत सारे हैं। आमतौर पर जब लोग "एएनएसआई" कहते हैं, तो उनका अर्थ है "मेरे सिस्टम के लिए डिफ़ॉल्ट लोकेल / कोडपेज" जो एनकोडिंग.फॉल्ट के माध्यम से प्राप्त होता है , और अक्सर विंडोज -1252 है, लेकिन अन्य स्थान हो सकते हैं।

वहाँ पर अधिक है मेरी यूनिकोड पेज और यूनिकोड समस्याओं डीबगिंग के लिए सुझाव दिए गए

कोड का अन्य बड़ा संसाधन unicode.org है जिसमें अधिक जानकारी है जिसमें आप कभी भी अपने तरीके से काम कर पाएंगे - संभवतः सबसे उपयोगी बिट कोड चार्ट है


6
Microsoft के 8-बिट कोड पृष्ठों पर लागू होने वाला शब्द "ANSI" एक मिथ्या नाम है। वे एएनएसआई मानकीकरण के लिए प्रस्तुत किए गए ड्राफ्ट पर आधारित थे, लेकिन एएनएसआई ने खुद उन्हें कभी मानकीकृत नहीं किया। Windows-1252 (कोड पृष्ठ जिसे आमतौर पर "ANSI" के रूप में जाना जाता है) ISO 8859-1 (लैटिन -1) के समान है, सिवाय इसके कि Windows-1252 में 0x80..0x9F रेंज में मुद्रण योग्य वर्ण हैं, जहाँ ISO 8859-1 उस सीमा में नियंत्रण वर्ण हैं। उस रेंज में यूनिकोड का नियंत्रण वर्ण भी होता है। en.wikipedia.org/wiki/Windows_code_page
कीथ थॉम्पसन

1
@ jp2code: मैं नहीं करूंगा - लेकिन आपको "वेब सर्वर से HTTP के माध्यम से वापस भेजी जाने वाली सामग्री" और "ईमेल के माध्यम से भेजी जाने वाली सामग्री" के बीच अंतर करने की आवश्यकता है। यह वेब पेज की सामग्री नहीं है जो ईमेल भेजती है - यह इसके पीछे का ऐप है, संभवतः। वेब सामग्री UTF-8 में सर्वश्रेष्ठ होगी; मेल सामग्री UTF-7 में हो सकती है, हालांकि मुझे संदेह है कि इन दिनों UTF-8 में रखना ठीक है।
जॉन स्कीट

2
UTF-16, IMHO के लिए, मैं कहूँगा "2 बाइट्स प्रति कोड यूनिट" क्योंकि BMP के बाहर एक कोड बिंदु 2 कोड इकाइयों (4 बाइट्स) के रूप में सरोगेट जोड़े में एन्कोड किया जाएगा।
लुडोविक क्रूट

1
UTF-16LE (.NET के भीतर) और BE के बीच के अंतर के साथ-साथ BOM की धारणा को भी याद करता है।
Maarten Bodewes

2
@Andrew: नहीं, कोई (सामान्य) एन्कोडिंग मार्कर नहीं है। Windows 1252 यूनिकोड BOM का प्रतिनिधित्व नहीं कर सकता है, और इसका कोई मतलब नहीं होगा क्योंकि यह केवल एक-बाइट-प्रति-चार एन्कोडिंग है।
जॉन स्कीट

68

कुछ पढ़ने के लिए आप चरित्र एन्कोडिंग पर शुरू करने के लिए: सॉफ्टवेयर पर योएल: बिल्कुल न्यूनतम हर सॉफ्टवेयर डेवलपर बिल्कुल, सकारात्मक यूनिकोड और चरित्र सेट के बारे में पता होना चाहिए (कोई बहाना नहीं!)

वैसे - ASP.NET का इससे कोई लेना देना नहीं है। एनकोडिंग सार्वभौमिक हैं।


7
लेख लिखे जाने के 6 साल बाद यहां जवाब दिया गया। पोस्ट लिखे जाने के 8 साल बाद मैंने इसे पढ़ा। 14 साल बाद और यह अभी भी एक अच्छा पढ़ा है। यह मेरे जीवन से पहले का आधे से ज्यादा हिस्सा है। अतुल्य।
डेव नाइज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.