Nasıl ResourceBundle kaynak özellikleri UTF-8 kullanmak için
UTF-8 benim kaynak özellikleri Java kullanarak ResourceBundle
kullanmak istiyorum. Doğrudan özellikleri dosyası içine metin girdiğimde, mojibake görüntüler.
Uygulamam Google App Engine üzerinde çalışır.
Birisi bana bir örnek verebilir misiniz? Bu işe giremiyorum.
CEVAP
Altında ResourceBundle#getBundle()
kullanan .properties
Bir dosya belirtildiğinde PropertyResourceBundle
kapsar. Bu da varsayılan olarak Properties#load(InputStream)
bu özellikler dosyalarını yüklemek için kullanır. the javadoc başı olarak, varsayılan olarak ISO-8859-1 olarak okunur.
public void load(InputStream inStream) throws IOException
Giriş akışından özellik listesi (anahtar ve eleman çiftleri) okur. Giriş akışı load(Okuyucu) belirtilen hat odaklı basit bir biçimdeve ISO 8859-1 karakter kodlaması kullanmak için kabul edilir; her bayt bir Latin1 karakter. Latin1, ve bazı özel karakterler, karakter tuşları ve öğeleri Java bölüm 3.3'de tanımlanan Unicode Merdivenleri kullanarak™ Dil Belirtimi temsil edilmektedir.
Yani ISO-8859-1 olarak kaydetmek lazım. Eğer herhangi bir karakter ötesinde ISO-8859-1 Aralık ve sen bir insan değilsin \uXXXX
üst baş ve sen böylece zorla için dosya Kaydet UTF-8, daha sonra Zorundasınız kullanmak için native2ascii aracı dönüştürmek bir UTF-8 özellikleri kaydedilen dosya için bir ISO-8859-1 kaydedilen dosya özellikleri onda bütün ele geçen karakterler dönüştürülür \uXXXX
biçimi. Örnekte UTF-8 olarak kodlanmış özellikleri text_utf8.properties
ISO-8859-1 kodlanmış geçerli bir özellikleri text.properties
dosya dönüştürür.
native2ascii -encoding UTF-8 text_utf8.properties text.properties
Eclipse gibi aklı başında bir IDE kullanırken, bu zaten Java tabanlı bir proje içinde .properties
bir dosya oluşturun ve Eclipse kendi editörü kullanımı olduğunda otomatik olarak yapılır. Eclipse şeffaf \uXXXX
format-8859-1, ISO aralığı dışında karakter dönüştürür. Ayrıca ekran görüntüleri aşağıda (not "Özellikleri" ve "Kaynak" alt sekmeleri, büyük İçin Tıklayın):
Alternatif olarak, sen-ebil da özel ResourceBundle.Control
uygulama neyin açıkça okuma özellikleri dosyası olarak UTF-8 kullanarak InputStreamReader
, böylece sadece kaydetmek onları UTF-8 olmadan ihtiyaç güçlük native2ascii
. İşte maçın başlamasına bir örnek:
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());
Nasıl verimli bir şekilde anahtarları/...
Nasıl C kaynak dosyaları arasında pay ...
Nasıl HTML Çeviklik paketi kullanmak i...
bir öğe veri-öznitelik değeri için bir...
Nasıl bir bağımlılık en son sürümünü k...