ResourceBundle#getBundle()
Yorganın altında kullanımları PropertyResourceBundle
bir zaman .properties
dosya belirtildi. Bu da varsayılan Properties#load(InputStream)
olarak bu özellikler dosyalarını yüklemek için kullanılır. Gereğince javadoc , bunlar ISO-8859-1 olarak varsayılan okuma göredir.
public void load(InputStream inStream) throws IOException
Giriş bayt akışından bir özellik listesi (anahtar ve öğe çiftleri) okur. Giriş akışı, yükte (Reader) belirtildiği gibi basit bir satır yönelimli formattadır ve ISO 8859-1 karakter kodlamasını kullanacağı varsayılır ; yani her bayt bir Latin1 karakteridir. Latin1 dilinde olmayan karakterler ve bazı özel karakterler, Java ™ Dil Belirtimi'nin 3.3 bölümünde tanımlanan Unicode çıkışlarını kullanan anahtarlarda ve öğelerde temsil edilir.
Bu yüzden onları ISO-8859-1 olarak kaydetmeniz gerekir. ISO-8859-1 aralığının dışında herhangi bir karakteriniz varsa ve \uXXXX
başınızın üstünü kullanamıyorsanız ve bu nedenle dosyayı UTF-8 olarak kaydetmek zorunda kalırsanız , dönüştürmek için native2ascii aracını kullanmanız gerekir. UTF-8 kaydedilmiş özellikler dosyasını, ortaya çıkarılan tüm karakterlerin \uXXXX
formata dönüştürüldüğü bir ISO-8859-1 kaydedilmiş özellikler dosyasına kaydedin . Aşağıdaki örnek, UTF-8 kodlu özellikler dosyasını text_utf8.properties
geçerli bir ISO-8859-1 kodlu özellikler dosyasına dönüştürür text.properties
.
native2ascii -kodlama UTF-8 text_utf8.properties text.properties
Eclipse gibi aklı başında bir IDE kullanırken, bu, .properties
Java tabanlı bir projede bir dosya oluşturup Eclipse'nin kendi düzenleyicisini kullandığınızda otomatik olarak yapılır . Eclipse şeffaf bir şekilde ISO-8859-1 aralığının ötesindeki karakterleri \uXXXX
formata dönüştürecektir. Ayrıca aşağıdaki ekran görüntülerine bakın (alttaki "Özellikler" ve "Kaynak" sekmelerine dikkat edin, büyük olanlar için tıklayın):
Alternatif olarak, ResourceBundle.Control
özellik dosyalarını UTF-8 kullanarak açıkça okuduğunuz özel bir uygulama da oluşturabilirsiniz InputStreamReader
, böylece bunları sorunsuz bir şekilde UTF-8 olarak kaydedebilirsiniz native2ascii
. İşte bir başlangıç örneği:
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;
}
}
Bu aşağıdaki gibi kullanılabilir:
ResourceBundle bundle = ResourceBundle.getBundle("com.example.i18n.text", new UTF8Control());
Ayrıca bakınız: