2015-08-18 7 views
11

मैं एक कोड के माध्यम से जा रहा था और निम्न पंक्ति में आया था।जावा वर्णसेट .forName ("ASCII") या Charset.forName ("यूएस-ASCII")

Charset.forName("ASCII") 

लेकिन जब मैं जावा को देखा documentation यह केवल

US-ASCII ISO-8859-1 UTF-8 UTF-16BE UTF-16LE UTF-16 

है लेकिन कोड काम करता है। क्या इस संदर्भ में 'ASCII' और 'US-ASCII' समानार्थी हैं? या कोड 'ASCII' पहचानने के बाद से कुछ डिफ़ॉल्ट मान ले रहा है? और इस परिदृश्य में 'ASCII' कितने बाइट्स एक चरित्र का प्रतिनिधित्व करता है?

उत्तर

12

प्रलेखन बताते हैं:

हर चारसेट एक विहित नाम है और यह भी एक या अधिक उपनाम हो सकता है। कैनोलिक नाम इस कक्षा के नाम विधि द्वारा वापस किया जाता है। कैननिकल नाम, आमतौर पर ऊपरी मामले में, सम्मेलन द्वारा होते हैं। एक वर्णमाला के उपनाम उपनाम विधि द्वारा वापस आते हैं।

इसके अलावा, Charset.forName(String charsetName) की जावाडोक आपको बताता है:

charsetName - अनुरोध किया चारसेट का नाम; या तो एक विहित नाम या एक उर्फ ​​

इस कोड के साथ आप वर्णसेट के बारे में और अधिक जानकारी प्राप्त कर सकते हैं हो सकता है:

Charset ascii = Charset.forName("US-ASCII"); 
System.out.println(ascii.aliases()); 
// [ANSI_X3.4-1968, cp367, csASCII, iso-ir-6, ASCII, iso_646.irv:1983, ANSI_X3.4-1986, ascii7, default, ISO_646.irv:1991, ISO646-US, IBM367, 646, us] 

System.out.println(ascii.newEncoder().maxBytesPerChar()); 
// 1.0 

Charset utf8 = Charset.forName("UTF-8"); 
System.out.println(utf8.newEncoder().maxBytesPerChar()); 
// 3.0 
+0

धन्यवाद, यह बहुत उपयोगी था –

0

ASCII यूएस-एएससीआईआईआई के लिए एक उपनाम है। यह प्रत्येक चरित्र के लिए 7-बिट बाइट का उपयोग करता है।

नोट: यदि आप कॉम्पैक्टनेस और सादगी चाहते हैं, तो मैं आईएसओ -885 9 -1 का उपयोग करने का सुझाव देता हूं। यह प्रति चरित्र 1 बाइट का भी उपयोग करता है लेकिन इसकी विस्तृत श्रृंखला है। यह u00FF को \u0000 का समर्थन करता है US-ASCII \u0000\u007F को

+1

धन्यवाद, यह IANA नाम को प्राथमिकता लगता है 'US-ASCII' –

+0

विरासत सॉफ्टवेयर के साथ संगतता की तुलना में आपको किसी अन्य चीज़ के लिए आईएसओ -885 9 -1 की सिफारिश नहीं करनी चाहिए। यह हल होने की तुलना में अधिक समस्याएं पैदा करता है, और यदि आप पश्चिम में नहीं रहते हैं (और ओपी नहीं करता है), यह वास्तव में पूरी तरह से बेकार है। –

+0

@ करोलस मुझे पूरा यकीन है कि एन्क्रिप्टेड डेटा प्रत्येक देश में एक ही बाइट का उत्पादन करेगा। ;) मैंने कहा कि आईएसओ -885 9 -1 का उपयोग करना एक बुरा विचार है, लेकिन यह काम करेगा, चाहे वह भाषा या वर्णमाला चाहे, एन्क्रिप्शन हर जगह उसी तरह काम करता है। –

1

निम्नलिखित स्निपेट चल रहा है का समर्थन करता है, जबकि, प्रिंट सभी charactersets कि उपलब्ध हैं:

SortedMap<String,Charset> availableCharsets = Charset.availableCharsets(); 
    Set<String> keySet = availableCharsets.keySet(); 
    for (String key : keySet) { 
     System.out.println(key); 
    } 

मैं नहीं ASCII सूची में दिख रहा है। चार्सेट क्लास में defaultCharset() के लिए कोड को देखकर पता चलता है कि यदि file.encoding एक अमान्य है, तो यह 'utf-8' पर डिफ़ॉल्ट है।

निम्न स्निपेट चलाना, प्रिंट 'यूटीएफ -8' को डिफ़ॉल्ट वर्णमाला के रूप में प्रिंट करना।

System.setProperty("file.encoding", "ASCII"); 
    System.out.println(Charset.defaultCharset()); 
+0

धन्यवाद, मुझे नहीं पता था कि डिफ़ॉल्ट 'utf-8' था। –

+0

मैंने तब तक नहीं किया जब तक कि मैंने इसे चेक नहीं किया :)। अगर मदद मिली तो कृपया उत्तर स्वीकार करें। – KDM

+0

मेरा कोड 'ASCII' के साथ काम करता प्रतीत होता है जहां रिसीवर 'ASCII' की अपेक्षा कर रहा है। इसलिए यदि यह वास्तव में अमान्य है और 'utf-8' का उपयोग करें तो मेरा रिसीवर इसे डीकोड करने में सक्षम नहीं होना चाहिए, है ना? सबसे पहले मुझे यह पता लगाना होगा कि क्या यह वास्तव में 'ASCII' का उपयोग करता है या आपके द्वारा उल्लिखित डिफ़ॉल्ट 'utf-8' पर वापस स्विच करता है। तो मैं जवाब स्वीकार करूंगा .. धन्यवाद फिर से –

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