2008-09-17 16 views
9

वहाँ स्ट्रिंग (बाइट []) निर्माता द्वारा प्रयुक्त एन्कोडिंग बदलने के लिए एक रास्ता है के लिए डिफ़ॉल्ट एन्कोडिंग बदल रहे हैं?स्ट्रिंग (बाइट [])

मेरे अपने कोड में मैं स्ट्रिंग (बाइट [], स्ट्रिंग) का उपयोग एनकोडिंग निर्दिष्ट करने की है, लेकिन मैं एक बाहरी पुस्तकालय है कि मैं बदल नहीं सकते उपयोग कर रहा हूँ।

String src = "with accents: é à"; 
byte[] bytes = src.getBytes("UTF-8"); 
System.out.println("UTF-8 decoded: "+new String(bytes,"UTF-8")); 
System.out.println("Default decoded: "+new String(bytes)); 

इस के लिए उत्पादन होता है:

UTF-8 decoded: with accents: é à 
Default decoded: with accents: é à 

मैं प्रणाली संपत्ति file.encoding बदलते की कोशिश की है, लेकिन यह काम नहीं करता।

उत्तर

7

आपको JVM लॉन्च करने से पहले लोकेल को बदलने की आवश्यकता है; देखें:

Java, bug ID 4163515

कुछ स्थानों

मतलब है आप जब JVM, इस तरह के

java -Dfile.encoding=UTF-8 ... 

के रूप में शुरू करने file.encoding चर सेट करके ऐसा कर सकते हैं लगता है ... लेकिन मैं प्रयास नहीं किया है यह मैं ऑपरेटिंग सिस्टम में एक पर्यावरण चर सेट करने का सबसे सुरक्षित तरीका है।

+0

क्या किसी ने -Dfile.encoding दृष्टिकोण की कोशिश की है? मंच-अज्ञेय तरीके से ऐसा करने में सक्षम होना बहुत अच्छा होगा। –

+0

@MattPassell हम निम्नलिखित आर्ग जब JVM शुरू करने का उपयोग सुनिश्चित करने के लिए है कि हम UTF-8 निर्दिष्ट कर रहे हैं ठीक से हर जगह: -Dfile.encoding = ISO646-अमेरिका -Dsun.jnu.encoding = ISO646-अमेरिका और यह ठीक काम करने के लिए प्रकट होता है। –

+0

प्रतिक्रिया के लिए धन्यवाद। क्या मैं कुछ भूल रहा हूँ? मैं सिर्फ आईएसओ 646-यूएस के लिए गुगल हूं और पाया कि यह ASCII के लिए आधिकारिक नाम है। यह कैसे सुनिश्चित करता है कि आप यूटीएफ -8 का उपयोग कर रहे हैं? –

1

से defaultCharset()

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

अधिकांश ओएस में आप एक पर्यावरण परिवर्तक का उपयोग कर वर्णसेट सेट कर सकते हैं।

+0

वास्तव में वह उत्तर नहीं जिसकी मुझे आशा थी (मुझे इसे गतिशील रूप से करने में सक्षम होना पसंद होता)। प्रमुख ओएस के लिए एन्कोडिंग को बदलने का नमूना देना बहुत अच्छा होगा। धन्यवाद – Michel

1

मुझे लगता है कि आप इस हैं: System.setProperty ("file.encoding", "UTF-8");

यह कुछ समस्याओं को हल किया है, लेकिन मैं अभी भी एक और लोगों की है। यदि एसओ आईएसओ -885 9 -1 है तो अक्षर "í" और "Í" सही ढंग से परिवर्तित नहीं होते हैं। स्टार्टअप पर JVM विकल्प के साथ, मैं इसे हल करता हूं। अब नेटबीन्स आईडीई में मेरा जावा कंसोल विशेष वर्ण दिखाते समय वर्णमाला को क्रैश कर रहा है।

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