आंतरिक स्ट्रिंग प्रतिनिधित्व के लिए जावा UTF-16 का उपयोग क्यों करता है?


29

मुझे लगता है कि इसका कारण यह है कि यह तेज था, चरित्र पर पहुंच की तरह सरणी, लेकिन कुछ अक्षर 16 बिट्स में फिट नहीं होंगे, इसलिए यह काम नहीं करेगा ...

तो अगर आपको किसी भी तरह से विशेष मामलों को संभालना है, तो यूटीएफ -8 का उपयोग क्यों न करें?


4
जावा डिजाइनरों से कुछ पूछना है, न कि बड़े पैमाने पर समुदाय। रचनात्मक के रूप में बंद करने के लिए मतदान।
Oded

16
@Oded: डेडएमजी के उत्तर के रूप में बिल्कुल अनुचित, दिखाता है।
माइकल बोर्गवर्ड

मैं उलझन में हूँ: मुझे पूरा यकीन था कि यह सवाल पहले से ही (दोनों यहाँ और एसओ पर) उत्तर दिया गया था, लेकिन मैं डुप्लिकेट (ओं) को नहीं ढूंढ सकता।
जोकिम सॉउर

हिस्टेरिक किशमिश के लिए। Utf8everywhere.org
Pavel Radzivilovsky

जवाबों:


47

क्योंकि यह UCS-2 हुआ करता था, जो कि 16-बिट की एक निश्चित लंबाई थी। बेशक, 16bit पर्याप्त नहीं निकला। उन्होंने UTF-16 को शीर्ष पर वापस रखा।


6
यहां यूनिकोड FAQ से एक उद्धरण दिया गया है : Originally, Unicode was designed as a pure 16-bit encoding, aimed at representing all modern scripts. (Ancient scripts were to be represented with private-use characters.) Over time, and especially after the addition of over 14,500 composite characters for compatibility with legacy sets, it became clear that 16-bits were not sufficient for the user community. Out of this arose UTF-16.जावा रिलीज़ के समय UTF-16 अभी तक दिखाई नहीं दिया है, और UTF-8 यूनिकोड मानक का हिस्सा नहीं था।
माल्कम

20
यूसीएस -2 एक तकनीकी शब्द है, न कि एक मूल शब्द।
डेडएमजी

14

मुख्य भाग के लिए, सादा और सरल भविष्य-प्रमाण के लिए। क्या यह एक गलत कारण था और इसके बारे में जाने का गलत तरीका एक अलग सवाल है।

आप इस दस्तावेज़ में उनके कुछ डिज़ाइन निर्णयों के पीछे के कुछ कारणों को 2004 के जावा 5 और यूटीएफ -16 में स्विच करने के बारे में देख सकते हैं, जो कुछ कमियों के बारे में बताते हैं: जावा प्लेटफ़ॉर्म में अनुपूरक वर्ण , और देखें कि जावा पारिस्थितिकी तंत्र का उपयोग क्यों करता है उनके स्टैक में अलग-अलग एनकोडिंग?

UTF-16 का उपयोग करने के नुकसान के बारे में अधिक जानकारी के लिए, और UTF-8 के सामान्य रूप से बेहतर विकल्प होने की संभावना क्यों है, क्या UTF-16 को हानिकारक माना जाना चाहिए? और UTF-8 हर जगह घोषणापत्र।


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

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

4
सॉफ़्टवेयर की दुनिया में यह जीवन है, आपको सभी डेटा के बिना विकल्प बनाने होंगे, और जब आप गलत होंगे तो आपको लंबे समय तक परिणामों के साथ रहना होगा। :-)
ब्रायन नोब्लुच

2
मुझे आश्चर्य है कि प्रदर्शन के निहितार्थ stringजावा में "विशेष" प्रकार बनाने के लिए क्या होगा (बहुत पसंद Arrayहै), String"साधारण" वर्ग होने के बजाय जो वास्तविक वर्णों वाले "साधारण" सरणी का संदर्भ रखता है। स्ट्रिंग कैसे उत्पन्न होती है, इस पर निर्भर करते हुए, UTF-8, UTF-16, या यहां तक ​​कि UTF-32 इसे संग्रहीत करने का सबसे कुशल तरीका हो सकता है। मुझे नहीं लगता कि "सामान्य" वर्ग के Stringलिए कई स्वरूपों को संभालने के लिए कोई विशेष रूप से कुशल तरीका है, लेकिन जेवीएम समर्थन के साथ एक "विशेष" प्रकार हो सकता है।
सुपरकैट

@ सुपरकैट: मेरे पास इसके लिए सटीक उत्तर नहीं है, लेकिन मुझे इसके लिए संबंधित एसओ उत्तर मिला है। :) वास्तव में विशेष प्रकार के दृष्टिकोण को संबोधित नहीं करता है, लेकिन सुव्यवस्थित तार होने के संभावित लाभ पर चर्चा करता है।
केश विन्यास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.