स्पष्ट उत्तर का उपयोग करना है Charset.defaultCharset()
लेकिन हमें हाल ही में पता चला है कि यह सही उत्तर नहीं हो सकता है। मुझे बताया गया था कि परिणाम कई अवसरों में java.io कक्षाओं द्वारा उपयोग किए जाने वाले वास्तविक डिफ़ॉल्ट चारसेट से अलग है। ऐसा लगता है कि जावा डिफ़ॉल्ट चारसेट के 2 सेट रखता है। किसी को भी इस मुद्दे पर कोई अंतर्दृष्टि है?
हम एक असफल मामले को पुन: पेश करने में सक्षम थे। यह उपयोगकर्ता की त्रुटि है, लेकिन यह अभी भी अन्य सभी समस्याओं के मूल कारण को उजागर कर सकता है। यहाँ कोड है,
public class CharSetTest {
public static void main(String[] args) {
System.out.println("Default Charset=" + Charset.defaultCharset());
System.setProperty("file.encoding", "Latin-1");
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("Default Charset in Use=" + getDefaultCharSet());
}
private static String getDefaultCharSet() {
OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream());
String enc = writer.getEncoding();
return enc;
}
}
हमारे सर्वर को एक विरासत प्रोटोकॉल में कुछ मिश्रित एन्कोडिंग (ANSI / लैटिन -1 / UTF-8) से निपटने के लिए लैटिन -1 में डिफ़ॉल्ट चारसेट की आवश्यकता होती है। तो हमारे सभी सर्वर इस JVM पैरामीटर के साथ चलते हैं,
-Dfile.encoding=ISO-8859-1
यहाँ जावा 5 पर परिणाम है,
Default Charset=ISO-8859-1
file.encoding=Latin-1
Default Charset=UTF-8
Default Charset in Use=ISO8859_1
कोई कोड में file.encoding सेट करके एन्कोडिंग रनटाइम को बदलने का प्रयास करता है। हम सभी जानते हैं कि काम नहीं करता है। हालाँकि, यह स्पष्ट रूप से डिफॉल्टचार्सेट () को बंद कर देता है, लेकिन यह आउटपुटस्ट्रीमवेयर द्वारा उपयोग किए जाने वाले वास्तविक डिफॉल्ट चारसेट को प्रभावित नहीं करता है।
क्या यह बग या फीचर है?
संपादित करें: स्वीकृत उत्तर मुद्दे की जड़ को दर्शाता है। मूल रूप से, आप जावा 5 में डिफ़ॉल्ट चरसेट () पर भरोसा नहीं कर सकते हैं, जो कि I / O वर्गों द्वारा उपयोग की जाने वाली डिफ़ॉल्ट एन्कोडिंग नहीं है। ऐसा लगता है कि जावा 6 इस समस्या को ठीक करता है।