SORU
11 Ocak 2011, Salı


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
11 Ocak 2011, Salı


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):

"Properties" tab "Source" tab

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());

Ayrıca Bkz:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Liz Morgan

    Liz Morgan

    4 Aralık 2011
  • oHeymarvin

    oHeymarvin

    11 Temmuz 2013
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007