utf 8 - यूटीएफ-8 एन्कोडेड चरित्र के लिए बाइट्स की अधिकतम संख्या क्या है?




utf-8 character-encoding (2)

एक यूटीएफ -8 एन्कोडेड चरित्र के लिए बाइट्स की अधिकतम संख्या क्या है?

मैं यूटीएफ -8 में एन्कोड किए गए स्ट्रिंग के बाइट्स को एन्क्रिप्ट कर दूंगा और इसलिए यूटीएफ -8 एन्कोडेड स्ट्रिंग के लिए अधिकतम बाइट्स को काम करने में सक्षम होना चाहिए।

क्या कोई एक यूटीएफ -8 एन्कोडेड चरित्र के लिए अधिकतम बाइट्स की पुष्टि कर सकता है


आगे के संदर्भ के बिना, मैं कहूंगा कि यूटीएफ -8 में एक चरित्र के लिए अधिकतम बाइट्स है

उत्तर: 6 बाइट्स

स्वीकार्य उत्तर के लेखक ने इसे "मूल विनिर्देश" के रूप में सही ढंग से इंगित किया, लेकिन मुझे लगता है कि यह पाठक को गुमराह करता है, क्योंकि जहां तक ​​मुझे पता है, यह अभी भी वर्तमान और सही विनिर्देश है, प्रति wikipedia , और एक Google पुस्तक प्रति जावा में यूटीएफ -8

स्वीकृत उत्तर में संदर्भित आरएफसी का कहना है कि केवल चार बाइट यूटीएफ -16 एन्कोडिंग के लिए प्रासंगिक हैं, इसलिए यह सही है अगर हम संदर्भ जोड़ते हैं

जवाब दें कि यूटीएफ -16 से यूटीएफ -8: 4 बाइट्स के केवल वर्णों का अनुवाद करें

अब, वे सभी पात्र हैं जिन्हें यूटीएफ -16 द्वारा समर्थित किया जा सकता है? विकिपीडिया के अनुसार, यूनिकोड x10FFFF कोड बिंदुओं का प्रतिनिधित्व कर सकता है। तो, 0 सहित, इसका मतलब है कि हम इन बाइट्स के साथ ऐसा कर सकते हैं: एफ एफएफ एफएफ, यानी ढाई बाइट, या 20 बिट्स। यूटीएफ -8 स्पेक पर वापस देखकर, हम देखते हैं कि हम चार यूटीएफ -8-एन्कोडेड बाइट्स के साथ 20 बिट्स का प्रतिनिधित्व कर सकते हैं। इसलिए

अगर सभी यूनिकोड को कवर करते हैं तो जवाब दें: 4 बाइट्स

लेकिन, जावा <= v7 में , वे यूटीएफ -8 के साथ यूनिकोड का प्रतिनिधित्व करने के लिए अधिकतम 3-बाइट अधिकतम बात करते हैं? ऐसा इसलिए है क्योंकि मूल यूनिकोड विनिर्देश ने केवल मूल बहुभाषी विमान ( बीएमपी ) को परिभाषित किया है, यानी यह यूनिकोड का पुराना संस्करण है, या आधुनिक यूनिकोड का सबसेट है। इसलिए

जवाब अगर केवल मूल यूनिकोड का प्रतिनिधित्व करता है, तो बीएमपी: 3 बाइट्स

लेकिन, ओपी दूसरी तरफ जाने के बारे में बात करता है। वर्णों से यूटीएफ -8 बाइट्स तक नहीं, लेकिन यूटीएफ -8 बाइट्स से बाइट्स प्रतिनिधित्व के "स्ट्रिंग" तक। शायद स्वीकार्य उत्तर के लेखक ने सवाल के संदर्भ से पाया, लेकिन यह जरूरी नहीं है, इसलिए इस प्रश्न के आकस्मिक पाठक को भ्रमित कर सकते हैं।

यूटीएफ -8 से देशी एन्कोडिंग में जाकर, हमें यह देखना होगा कि "स्ट्रिंग" कैसे कार्यान्वित किया जाता है। पाइथन> = 3 जैसी कुछ भाषाएं प्रत्येक वर्ण को पूर्णांक कोड बिंदुओं के साथ प्रस्तुत करती हैं, जो कि कुछ कचरे के साथ यूनिकोड की आवश्यकता वाले 20 को कवर करने के लिए प्रति वर्ण 4 बाइट्स की अनुमति देती है। बिल्कुल 20 बिट क्यों नहीं? क्योंकि चीजें तेजी से होती हैं जब वे बाइट-गठबंधन होते हैं। पाइथन <= 2 और Java जैसी कुछ भाषाएं यूटीएफ -16 एन्कोडिंग का उपयोग करके वर्णों का प्रतिनिधित्व करती हैं, जिसका अर्थ है कि उन्हें विस्तारित यूनिकोड (बीएमपी नहीं) का प्रतिनिधित्व करने के लिए सरोगेट जोड़े का उपयोग करना होगा। किसी भी तरह से अभी भी 4 बाइट अधिकतम है।

जवाब अगर यूटीएफ -8 जा रहा है -> देशी एन्कोडिंग: 4 बाइट्स

तो, अंतिम निष्कर्ष, 4 सबसे आम सही उत्तर है, इसलिए हमें यह सही मिला। लेकिन, कुछ संदर्भों में आपको सावधान रहना चाहिए। उदाहरण के लिए, उम्मीद न करें कि आप जो कुछ भी यूटीएफ -8 स्ट्रीम से अधिकतम 4 बाइट में पढ़ते हैं उसका प्रतिनिधित्व कर सकते हैं। यदि यह यूनिकोड नहीं है, तो आपको 6 बाइट्स की आवश्यकता हो सकती है।


RFC3629 अनुसार प्रति वर्ण बाइट्स की अधिकतम संख्या 4 है जो वर्ण तालिका को U+10FFFF तक सीमित U+10FFFF :

यूटीएफ -8 में, यू +0000..यू + 10 एफएफएफएफ रेंज (यूटीएफ -16 सुलभ रेंज) के पात्र 1 से 4 ऑक्टेट्स के अनुक्रमों का उपयोग करके एन्कोड किए गए हैं।

( U+10FFFF पिछले कोड कोड के लिए छह बाइट वर्ण कोड के लिए मूल विनिर्देशन की अनुमति है।)

128 से कम कोड वाले अक्षरों को केवल 1 बाइट की आवश्यकता होगी, और अगले 1920 वर्ण कोडों को केवल 2 बाइट की आवश्यकता होगी। जब तक आप एक गूढ़ भाषा के साथ काम नहीं कर रहे हैं, तब तक चरित्र गणना को 4 से गुणा करना एक महत्वपूर्ण अतिवृद्धि होगी।







character