2016-12-30 12 views
9

क्यों .class यूटीएफ -8 है, लेकिन रनटाइम .class यूटीएफ -16 है?कक्षा फ़ाइल और यूटीएफ -16 में यूटीएफ -8 का उपयोग रनटाइम में क्यों किया जाता है?

enter image description here

+0

क्यों नहीं? क्या होगा यदि JVM को यूटीएफ -16 की आवश्यकता है लेकिन संकलित फ़ाइल नहीं है? समस्या क्या है ? – AxelH

+1

@ एक्सेल एच आराम। वह सिर्फ यह जानना चाहता है कि यूटीएफ -8 के बजाय जेवीएम को यूटीएफ -16 क्यों चाहिए। यह वैध है! – AhmadWabbi

+0

@ अहमदवब्बी मैंने नहीं कहा कि उसका सवाल बेवकूफ था ... मैं बस कुछ विचार बताता हूं ... – AxelH

उत्तर

0

स्रोत कोड किसी भी एन्कोडिंग हो सकता है, आप भी संकलक क्या एन्कोडिंग -encoding ध्वज का उपयोग कर उपयोग करने के लिए कह सकते हैं।

JVM UTF-16 का उपयोग करता है, और यह JLS में निर्दिष्ट है:

जावा प्रोग्रामिंग भाषा, 16-बिट कोड इकाइयों के दृश्यों में पाठ का प्रतिनिधित्व करता है UTF-16 एन्कोडिंग का उपयोग कर।

+1

यह प्रश्न का उत्तर नहीं देता है; सवाल '.class' फ़ाइल की एन्कोडिंग के बारे में है, न कि '.java' फ़ाइल। –

-2

javac encoding:

-encoding एन्कोडिंग ऐसे ईयूसी-जेपी और UTF-8 के रूप में स्रोत फ़ाइल एन्कोडिंग नाम, सेट करें। यदि -encoding निर्दिष्ट नहीं है, तो प्लेटफ़ॉर्म डिफ़ॉल्ट कनवर्टर का उपयोग किया जाता है।

JVM encoding:

जावा आभासी मशीन के हर उदाहरण के एक डिफ़ॉल्ट चारसेट, जो या मानक वर्णसेट में से एक हो नहीं हो सकता है। डिफ़ॉल्ट वर्णसेट वर्चुअल-मशीन स्टार्टअप के दौरान निर्धारित किया जाता है और आमतौर पर अंतर्निहित ऑपरेटिंग सिस्टम द्वारा उपयोग किए जाने वाले लोकेल और वर्णसेट पर निर्भर करता है।

+1

यह सवाल का जवाब नहीं देता है; सवाल '.class' फ़ाइल की एन्कोडिंग के बारे में है, न कि '.java' फ़ाइल। –

+1

प्रश्न के पहले भाग के लिए "क्यों। क्लास यूटीएफ -8 है" - जब आप जावा फ़ाइल को संकलित करते हैं।javac का उपयोग कर क्लास फ़ाइल यह डिफ़ॉल्ट एन्कोडिंग का उपयोग करता है, जब -कोडिंग विकल्प निर्दिष्ट नहीं है। प्रश्न का दूसरा भाग "लेकिन रनटाइम। क्लास यूटीएफ -16 है?" रनटाइम जेवीएम पर मूल पुस्तकालय के साथ सौदों और इसलिए यूटीएफ -16 – puvi

+0

फिर से, यह सवाल का जवाब नहीं देता है। आप स्रोत फ़ाइल के बारे में बात करते रहते हैं, प्रश्न संकलित 'कक्षा' फ़ाइल में उपयोग किए गए एन्कोडिंग के बारे में है, जो हमेशा यूटीएफ -8 होता है, और जावा प्रक्रिया रनटाइम पर यूटीएफ -16 का उपयोग करती है। –

6

क्यों .class UTF-8

जो आम तौर पर ज्यादातर ASCII हैं एक पश्चिमी दर्शकों के लिए लिखा कक्षाएं, के लिए है, यह सबसे कॉम्पैक्ट एन्कोडिंग है।

लेकिन रनटाइम। क्लास यूटीएफ -16 है?

क्रम में यह, तार कि एक निश्चित चौड़ाई एन्कोडिंग (Why Java char uses UTF-16?) का उपयोग हेरफेर करने के लिए इतना यूसीएस -2 में चुना गया था जल्दी है। यह यूसीएस -2 से यूटीएफ -16 के परिवर्तन से यह एक और परिवर्तनीय-चौड़ाई एन्कोडिंग बना रहा है।

जैसा कि उस प्रश्न की टिप्पणियों में उल्लेख किया गया है, JEP 254 रनटाइम प्रतिनिधित्व को कुछ और अधिक कुशल (उदाहरण के लिए, लैटिन -1) में बदलने के लिए अनुमति देता है।

+0

* रनटाइम पर स्ट्रिंग्स में हेरफेर करना तेज होता है जो एक निश्चित-चौड़ाई एन्कोडिंग का उपयोग करता है * => एन्कोडिंग वास्तव में तय की गई चौड़ाई थी जब इसे पेश किया गया था, या क्या पहले से ही कई कोड बिंदुओं की आवश्यकता वाले ग्रैफेम्स की धारणा थी? –

+1

क्रमबद्ध करें; 1 99 6 में यूनिकोड 2.0 में अपनी पहली उपस्थिति से यूटीएफ -16 सहायक चर-चौड़ाई एन्कोडिंग के बावजूद (http://www.unicode.org/faq/utf_bom.html), यूटीएफ -16 2001 में यूनिकोड 3.1 तक प्रभावी रूप से निश्चित-चौड़ाई थी, जिसे केवल जे 2 एसई 5 (http://www.oracle.com/us/technologies/java/supplementary-142654.html) में समर्थित किया गया था। – Joe

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