2010-11-11 15 views
18

के बजाय उपयोग करने के लिए एक जार को लागू करने के लिए जार को मजबूर करने के लिए (या जेवीएम जो जार चलता है) utf-8 को कैसे दबाएं मेरे विंडोज़ का डिफ़ॉल्ट एन्कोडिंग जीबीके है, और मेरा ग्रहण पूरी तरह से utf-8 एन्कोडेड है।
तो एक ऐसा अनुप्रयोग जो मेरे ग्रहण में अच्छी तरह से चलता है, दुर्घटनाग्रस्त हो जाता है क्योंकि जार फ़ाइल के रूप में निर्यात किए जाने पर शब्द अपठनीय हो जाते हैं;
मैं आवेदन चलाने के लिए एक .bat फ़ाइल में निम्न पंक्ति लिखने के लिए हैसिस्टम के डिफ़ॉल्ट एन्कोडिंग

start java -Dfile.encoding=utf-8 -jar xxx.jar  

अब मेरे सवाल है कि मैं आवेदन का उपयोग करता है स्थापित करने के लिए स्रोत कोड में कुछ लिख सकते हैं (या JVM में चलता है) है सिस्टम के डिफ़ॉल्ट एन्कोडिंग के बजाय utf-8।

+0

संबंधित http://stackoverflow.com/questions/361975/setting-the-default- जावा-कैरेक्टर-एन्कोडिंग –

उत्तर

15

जब आप पढ़ने के लिए एक फ़ाइल को खोलने, आप स्पष्ट रूप से फ़ाइल को पढ़ने के लिए एन्कोडिंग का उपयोग करना चाहते निर्दिष्ट करने की आवश्यकता:

Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8); 

तब डिफ़ॉल्ट मंच एन्कोडिंग का मूल्य (जो आप -Dfile.encoding का उपयोग कर बदल सकते हैं) अब मायने रखता है।

नोट:

मैं सामान्य रूप से की सलाह देते हैं हमेशा किसी भी आपरेशन कि इस तरह के चरित्र आई/ओ के रूप में मानक वातावरण पर निर्भर करता है, के लिए स्पष्ट रूप से एन्कोडिंग निर्दिष्ट होगा। कई जावा एपीआई विधियों को प्लेटफॉर्म एन्कोडिंग में डिफ़ॉल्ट रूप से डिफॉल्ट किया जाता है, जिसे मैं एक खराब डिज़ाइन पर विचार करता हूं, क्योंकि अक्सर प्लेटफ़ॉर्म एन्कोडिंग सही नहीं है, और यदि यह आपके ऐप को तोड़ने के बाद अचानक बदल सकता है (यदि उपयोगकर्ता उदा। ओएस लोकेल स्विच करता है)।

तो बस हमेशा यह कहें कि आप कौन सी एन्कोडिंग चाहते हैं।

ऐसे कुछ मामले हैं जहां प्लेटफ़ॉर्म एन्कोडिंग सही है (जैसे कि जब उपयोगकर्ता ने आपके लिए बनाया गया फ़ाइल खोलते हैं), लेकिन वे काफी दुर्लभ हैं।

नोट 2:

java.nio.charset.StandardCharsets जावा 1.7 में पेश किया गया था। पुराने जावा संस्करणों के लिए, आपको स्ट्रिंग (यूघ) के रूप में इनपुट एन्कोडिंग निर्दिष्ट करने की आवश्यकता है। संभावित एन्कोडिंग की सूची जेवीएम पर निर्भर करती है, लेकिन प्रत्येक जेवीएम की कम से कम गारंटी है:

यूएस-एएससीआईआईआई, आईएसओ -885 9 -1, यूटीएफ -8, यूटीएफ -16 बीई, यूटीएफ -16LE, यूटीएफ -16।

+0

धन्यवाद! मैं '-फाइल का उपयोग करने से पहले।एन्कोडिंग', मैंने 'नई स्ट्रिंग (बाइट्स [], "यूटीएफ 8") की कोशिश की थी; शायद यह हर जगह इसका उपयोग नहीं कर रहा था, इसलिए अभी भी काम नहीं कर रहा था। अभी मैंने फिर कोशिश की और सफलता मिली। – Aloong

+0

@Aloong: हैप्पी यह आपके लिए काम किया। बीटीडब्ल्यू, यह "यूटीएफ -8" है, न कि "यूटीएफ 8"। – sleske

0

एक और तरीका है। यदि आप सुनिश्चित हैं कि आप इनपुट और आउटपुट को एन्कोड करना चाहते हैं, तो आप अपनी जार फ़ाइल संकलित करने से पहले सेटिंग्स को सहेज सकते हैं।

नेटबीन के लिए यहां एक उदाहरण दिया गया है।

प्रोजेक्ट >> गुण >> भागो >> वी एम विकल्प और टाइप -Dfile. encoding=UTF-8

उसके बाद, सब कुछ UTF-8 में हर बार जावा वी एम शुरू कर दिया है एन्कोड किया गया है करने के लिए।

(मैं ग्रहण एक ही संभावना प्रदान करता है लगता है। यदि नहीं, तो बस वी एम विकल्प गूगल।)

enter image description here

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