2012-01-03 10 views
23

मैंने कुछ स्थानों पर पढ़ा है कि जावास्क्रिप्ट तार यूटीएफ -16 हैं, और अन्य स्थानों पर वे यूसीएस -2 हैं। मैंने कुछ अंतर खोजने की कोशिश करने के लिए चारों ओर खोज किया और पाया:जावास्क्रिप्ट तार - यूटीएफ -16 बनाम यूसीएस -2?

प्रश्न: यूसीएस -2 और यूटीएफ -16 के बीच क्या अंतर है?

एक: यूसीएस -2 अप्रचलित शब्दावली जो सरोगेट कोड अंक से पहले, यूनिकोड 1.1 अप करने के लिए एक यूनिकोड कार्यान्वयन के लिए संदर्भित करता है और UTF-16 मानक के संस्करण 2.0 में जोड़ा गया था है। इस शब्द को अब से बचा जाना चाहिए।

यूसीएस -2 एक विशिष्ट डेटा प्रारूप को परिभाषित नहीं करता है, क्योंकि यूटीएफ -16 और यूसीएस -2 डेटा एक्सचेंज के प्रयोजनों के लिए समान हैं। दोनों 16-बिट हैं, और बिल्कुल वही कोड इकाई प्रतिनिधित्व है।

कभी कभी अतीत में एक कार्यान्वयन "यूसीएस -2" लेबल किया गया लिए संकेत मिलता है कि यह अनुपूरक वर्णों का समर्थन नहीं करता है और पात्रों के रूप में किराए की कोड अंक के जोड़े की व्याख्या नहीं है। इस तरह के कार्यान्वयन पूरक पात्रों के लिए चरित्र गुणों, कोड बिंदु सीमाओं, संयोजन आदि के प्रसंस्करण को संभाल नहीं पाएगा।

के माध्यम से

: http://www.unicode.org/faq/utf_bom.html#utf16-11

तो मेरे सवाल है, यह क्योंकि जावास्क्रिप्ट स्ट्रिंग वस्तु के तरीकों और सूचियों को क्या कुछ लोगों को यह यूसीएस -2 पर विचार कर पात्रों के बजाय 16-बिट डेटा मान पर कार्रवाई है? और यदि ऐसा है, तो 16-बिट डेटा खंडों के बजाय अक्षरों के चारों ओर उन्मुख जावास्क्रिप्ट स्ट्रिंग ऑब्जेक्ट यूटीएफ -16 माना जाएगा? या क्या मैं कुछ और याद कर रहा हूँ?

संपादित करें: के रूप में अनुरोध किया, यहाँ कुछ जावास्क्रिप्ट तार कह स्रोत हैं यूसीएस -2 हैं:

http://blog.mozilla.com/nnethercote/2011/07/01/faster-javascript-parsing/ http://terenceyim.wordpress.com/tag/ucs2/

संपादित: जो कोई भी इस पार आ सकता है के लिए, यह बाहर की जाँच के लिए सुनिश्चित हो लिंक:

http://mathiasbynens.be/notes/javascript-encoding

उत्तर

18

जावास्क्रिप्ट, कड़ाई से बोलते हुए, ईसीएमएस्क्रिप्ट, पूर्व-दिनांक यूनिकोड 2.0, इसलिए कुछ मामलों में आपको यूसीएस -2 के संदर्भ मिल सकते हैं क्योंकि संदर्भ सही समय पर सही था। क्या आप हमें जावास्क्रिप्ट के विशिष्ट उद्धरणों को "यूसीएस -2" होने के बारे में बता सकते हैं? ECMAScript संस्करणों 3 और 5 के लिए

विनिर्देशों कम से कम दोनों स्पष्ट रूप से एक स्ट्रिंग की घोषणा एक संग्रह अहस्ताक्षरित 16-बिट पूर्णांक होना करने के लिए और कहा कि अगर उन पूर्णांक मूल्यों टेक्स्ट का डेटा का प्रतिनिधित्व करने के लिए हैं, तो वे UTF-16 कोड इकाइयां हैं ।the ECMAScript Language Specification की धारा 8.4 देखें।


संपादित: मैं अब और नहीं यकीन है कि मेरे इस सवाल का जवाब पूरी तरह से सही है। ऊपर वर्णित उत्कृष्ट आलेख देखें, http://mathiasbynens.be/notes/javascript-encoding, जो संक्षेप में कहता है कि एक जावास्क्रिप्ट इंजन आंतरिक रूप से यूटीएफ -16 का उपयोग कर सकता है, और अधिकतर, भाषा स्वयं प्रभावी रूप से उन पात्रों को उजागर करती है जैसे कि वे यूसीएस -2 थे।

+0

लिंक के लिए धन्यवाद, spec की भाषा बहुत स्पष्ट लगती है। मुझे लगता है कि यूसीएस -2 बात या तो पुरानी है या सरोगेट जोड़े के लिए विधि और अनुक्रमण समर्थन पर आधारित है। – patorjk

+0

तो, विनिर्देश बताता है "अनुक्रम में प्रत्येक पूर्णांक मान आमतौर पर यूटीएफ -16 पाठ की एक 16-बिट इकाई का प्रतिनिधित्व करता है। हालांकि, ईसीएमएस्क्रिप्ट मानों पर कोई प्रतिबंध या आवश्यकता नहीं रखता है, सिवाय इसके कि वे 16-बिट हस्ताक्षरित पूर्णांक होना चाहिए ", जो यह कहने के बराबर है कि आधुनिक सी कार्यक्रमों में प्रत्येक चरित्र वर्ण" चरित्र "में प्रत्येक वर्ण मान यूटीएफ -8 पाठ की एक 8-बिट इकाई का प्रतिनिधित्व करता है, लेकिन स्पष्ट रूप से यह बताता है कि सी स्ट्रिंग्स" हैं "यूटीएफ -8 होगा गलत। अर्थशास्त्र जावास्क्रिप्ट प्रदान करता है केवल यूसीएस -2; यदि आप यूटीएफ -16 समर्थन चाहते हैं तो आपको डीएमओएस के जवाब के अनुसार स्वयं ऐसा करना होगा। –

+0

यूसीएस संख्याओं के साथ बात है, और हाँ यूसीएस 2 पुराना है, वर्तमान संस्करण यूसीएस 4. यूटीएफ -8/-16/-32 बिट्स में यूसीएस चीजों के सरणी का प्रतिनिधित्व करने के तरीके हैं। ;) – Philip

8

यह UTF-16/यूएससी -2 है। यह सरोगेट जोड़े को संभाल सकता है, लेकिन charAt/charCodeAt एक 16-बिट चार देता है, न कि यूनिकोड कोडपॉइंट। यदि आप सरोगेट जोड़े को संभालना चाहते हैं, तो मैं this के माध्यम से त्वरित पढ़ने का सुझाव देता हूं।

+0

"सरोगेट जोड़े को संभाल सकते हैं" से आपका क्या मतलब है? – cubuspl42

+0

यदि आप लिंक किए गए लेख को पढ़ते हैं तो यह वर्णन करेगा कि यह सरोगेट जोड़े को कैसे संभालना है। मेरा मुद्दा यह है कि यह डिफ़ॉल्ट रूप से त्रुटि नहीं करता है, और प्रदान किए गए लिंक पर कोड में दिखाए गए सरोगेट जोड़े को संभालने के तरीके हैं। –

+1

@ cubuspl42 यूटीएफ -16 0x0-0xFFFF तक सीमित नहीं है, यह 16-बिट वर्णों के जोड़े को एन्कोड कर सकता है और पूरे यूनिकोड रेंज को 0x0-0x101000 से दस लाख कोडपॉइंट्स का प्रतिनिधित्व कर सकता है। इन जोड़े को "सरोगेट जोड़े" कहा जाता है। – doug65536

संबंधित मुद्दे