मैं यह पूछने जा रहा हूं कि क्या संभवतः काफी विवादास्पद प्रश्न है: "क्या सबसे लोकप्रिय एनकोडिंग में से एक, यूटीएफ -16, हानिकारक होना चाहिए?"
मैं यह सवाल क्यों पूछूं?
कितने प्रोग्रामर इस तथ्य से अवगत हैं कि UTF-16 वास्तव में एक चर लंबाई एन्कोडिंग है? इससे मेरा मतलब है कि कोड पॉइंट हैं, जो सरोगेट जोड़े के रूप में दर्शाए जाते हैं, एक से अधिक तत्व लेते हैं।
मुझे पता है; बहुत सारे एप्लिकेशन, फ्रेमवर्क और एपीआई यूटीएफ -16 का उपयोग करते हैं, जैसे कि जावा के स्ट्रिंग, सी # के स्ट्रिंग, विन 32 एपीआई, क्यूटी जीयूआई लाइब्रेरी, आईसीयू यूनिकोड लाइब्रेरी, आदि। हालांकि, इन सभी के साथ, प्रसंस्करण में बहुत सारे बुनियादी कीड़े हैं। BMP से बाहर के वर्ण (दो UTF-16 तत्वों का उपयोग करके वर्णों को कूटबद्ध किया जाना चाहिए)।
उदाहरण के लिए, इनमें से किसी एक अक्षर को संपादित करने का प्रयास करें:
- 𝄞 ( U + 1D11E ) संगीत सिंबल जी CLEF
- 𝕥 ( U + 1D565 ) मैथेमैटिकल डबल- स्ट्रक्च SMALL T
- 𝟶 ( U + 1D7F6 ) मैथेमेटिकल मोनोसैस डीआईजीटी जीरो
- 2008 ( U + 2008A ) हान चरित्र
आपके द्वारा इंस्टॉल किए गए फोंट के आधार पर आप कुछ याद कर सकते हैं। ये सभी अक्षर बीएमपी (बेसिक मल्टीलिंगुअल प्लेन) के बाहर हैं। यदि आप इन वर्णों को नहीं देख सकते हैं, तो आप उन्हें यूनिकोड वर्ण संदर्भ में देखने का भी प्रयास कर सकते हैं ।
उदाहरण के लिए, विंडोज में फ़ाइल नाम बनाने की कोशिश करें जिसमें ये वर्ण शामिल हैं; "बैकस्पेस" के साथ इन वर्णों को हटाने की कोशिश करें कि वे यूटीएफ -16 का उपयोग करने वाले विभिन्न अनुप्रयोगों में कैसे व्यवहार करते हैं। मैंने कुछ परीक्षण किए और परिणाम काफी खराब हैं:
- ओपेरा को उन्हें संपादित करने में समस्या है (बैकस्पेस पर आवश्यक 2 प्रेस हटाएं)
- नोटपैड उनके साथ सही तरीके से व्यवहार नहीं कर सकता (बैकस्पेस पर आवश्यक 2 प्रेस हटाएं)
- टूटे हुए विंडो संवादों में फ़ाइल नाम संपादन (बैकस्पेस पर आवश्यक 2 प्रेस हटाएं)
- सभी qt3 अनुप्रयोग उनके साथ सौदा नहीं कर सकते - एक प्रतीक के बजाय दो खाली वर्ग दिखाएं ।
- पायथन ऐसे वर्णों को गलत तरीके से एनकोड करता है जब
u'X'!=unicode('X','utf-16')
BMP के बाहर वर्ण में कुछ प्लेटफार्मों पर सीधे उपयोग किया जाता है । - जब यूटीएफ -16 यूनिकोड स्ट्रिंग्स के साथ अजगर संकलित होता है तो पायथन 2.5 यूनिकोडेटा ऐसे पात्रों पर गुण प्राप्त करने में विफल रहता है।
- StackOverflow पाठ से इन वर्णों को हटाता हुआ प्रतीत होता है यदि सीधे यूनिकोड वर्णों के रूप में संपादित किया जाता है (इन पात्रों को HTML यूनिकोड एस्केप का उपयोग करके दिखाया गया है)।
- MaxFength के साथ सीमित होने पर WinForms TextBox अवैध स्ट्रिंग उत्पन्न कर सकती है ।
ऐसा लगता है कि इस तरह के कीड़े UTF-16 का उपयोग करने वाले कई अनुप्रयोगों में ढूंढना बेहद आसान है।
तो ... क्या आपको लगता है कि UTF-16 को हानिकारक माना जाना चाहिए?