जब कोई फ़ाइल निर्दिष्ट की जाती है तो ResourceBundle#getBundle()
कवर के नीचे का उपयोग । यह बदले में उन संपत्तियों की फाइलों को लोड करने के लिए डिफ़ॉल्ट रूप से उपयोग करता है । जावाडॉक के अनुसार , वे आईएसओ-8859-1 के रूप में डिफ़ॉल्ट रूप से पढ़े जाते हैं।PropertyResourceBundle
.properties
Properties#load(InputStream)
public void load(InputStream inStream) throws IOException
इनपुट बाइट स्ट्रीम से एक संपत्ति सूची (कुंजी और तत्व जोड़े) पढ़ता है। इनपुट स्ट्रीम एक सरल रेखा-उन्मुख प्रारूप में है जैसा कि लोड (रीडर) में निर्दिष्ट है और इसे आईएसओ 8859-1 वर्ण एन्कोडिंग का उपयोग करने के लिए माना जाता है ; प्रत्येक बाइट एक लैटिन 1 वर्ण है। लैटिन 1 में वर्ण नहीं, और कुछ विशेष वर्ण, यूनिकोड के उपयोग की कुंजी और तत्वों में दर्शाए गए हैं जैसा कि जावा ™ भाषा विनिर्देश के अनुभाग 3.3 में परिभाषित किया गया है।
इसलिए, आपको उन्हें ISO-8859-1 के रूप में सहेजना होगा। यदि आपके पास ISO-8859-1 श्रेणी से परे कोई भी वर्ण है और आप \uXXXX
शीर्ष के ऊपर का उपयोग नहीं कर सकते हैं और आप इस प्रकार फ़ाइल को UTF-8 के रूप में सहेजने के लिए मजबूर हैं, तो आपको कनवर्ट करने के लिए native2ascii टूल का उपयोग करना होगा UTF-8 ने गुणनफल फ़ाइल को ISO-8859-1 सहेजी गई संपत्तियों की फाइल में रखा है, जिसमें सभी अनलॉक किए गए अक्षर \uXXXX
प्रारूप में परिवर्तित हो जाते हैं । निम्न उदाहरण एक UTF-8 एन्कोडेड प्रॉपर्टीज़ फ़ाइल text_utf8.properties
को एक मान्य ISO-8859-1 एन्कोडेड प्रॉपर्टीज़ फ़ाइल में कनवर्ट करता है text.properties
।
native2ascii -encoding UTF-8 text_utf8.properties text.properties
एक ग्रहण आईडीई जैसे ग्रहण का उपयोग करते समय, यह पहले से ही स्वचालित रूप से किया जाता है जब आप .properties
एक जावा आधारित परियोजना में एक फ़ाइल बनाते हैं और ग्रहण के अपने संपादक का उपयोग करते हैं। ग्रहण आईएसओ-8859-1 रेंज से परे के पात्रों को पारदर्शी रूप से \uXXXX
प्रारूपित करेगा। नीचे स्क्रीनशॉट भी देखें (नीचे "गुण" और "स्रोत" टैब पर ध्यान दें, बड़े के लिए क्लिक करें):

वैकल्पिक रूप से, आप एक कस्टम ResourceBundle.Control
कार्यान्वयन भी बना सकते हैं जिसमें आप यूटीएफ -8 के रूप में संपत्तियों की फाइलों को स्पष्ट रूप से पढ़ InputStreamReader
सकते हैं, ताकि आप उन्हें बिना परेशानी के जरूरत के बिना यूटीएफ -8 के रूप में बचा सकें native2ascii
। यहां एक किकऑफ उदाहरण दिया गया है:
public class UTF8Control extends Control {
public ResourceBundle newBundle
(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException
{
// The below is a copy of the default implementation.
String bundleName = toBundleName(baseName, locale);
String resourceName = toResourceName(bundleName, "properties");
ResourceBundle bundle = null;
InputStream stream = null;
if (reload) {
URL url = loader.getResource(resourceName);
if (url != null) {
URLConnection connection = url.openConnection();
if (connection != null) {
connection.setUseCaches(false);
stream = connection.getInputStream();
}
}
} else {
stream = loader.getResourceAsStream(resourceName);
}
if (stream != null) {
try {
// Only this line is changed to make it to read properties files as UTF-8.
bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
} finally {
stream.close();
}
}
return bundle;
}
}
इसका उपयोग इस प्रकार किया जा सकता है:
ResourceBundle bundle = ResourceBundle.getBundle("com.example.i18n.text", new UTF8Control());
यह सभी देखें: