Lesen resourcebundle als UTF-8. getString () - Methode zu ändern scheint-encoding ISO-8859 -

Habe ich die ehrenvolle Zuordnung zum ändern der Codierung unserer kompletten workspace, Projekte und Dateien, die UTF-8-Codierung. Wir haben verschiedene Resourcebundles, die verwendet werden, um code Sonderzeichen mit unicode. Wir wollte auch, um loszuwerden, das unicode Zeug durch die Umstellung auf UTF-8 umgestellt damit ich die Codierung des Resourcebundles (.Eigenschaften) - Dateien zu und ersetzt die Unicode-Zeichen.

Wir haben auch Deutsche resourcebundles und einige chars wie

Ä, Ö, Ü, ß. ä, ö, ü und auch Sonderzeichen wie „ oder “

werden nicht korrekt angezeigt im browser. Beispiel:

Resourcebundleentry:

executeShellCommand.label = Shellkommando ausführen

Ergebnis im browser:
Lesen resourcebundle als UTF-8. getString () - Methode zu ändern scheint-encoding ISO-8859 -

Den resourcebundles sind, Lesen Sie die mit dem Java.util.ResourceBundle.getString(String key) Methode:

    public String getLocalizedString(ResourceBundle bundle, String key) {
    try {
        System.out.println("getLocalizedString, key: " + key + ", resourcebundle: " + bundle.getString(key));
        return bundle.getString(key);
    } catch (MissingResourceException e) {
        return key;
    }
}

Wenn ich überprüfen Sie die Ausgabe des obigen Sysout bekomme ich Folgendes:
getLocalizedString, key: executeShellCommand.label, resourcebundle: Shellkommando ausführen

Scheint es, dass die getString(key) - Methode ändert die Kodierung der chars beim Lesen Sie aus den bündeln, um die standard-resourcbundleencoding(ISO-8859).

Ich habe versucht, gegen dieses Problem:

    public String getLocalizedString(ResourceBundle bundle, String key) {
    try {
        System.out.println("getLocalizedString, key: " + key + ", resourcebundle: " + new String (bundle.getString(key).getBytes(), "UTF-8"));
        return new String (bundle.getString(key).getBytes(), "UTF-8");
    } catch (MissingResourceException e) {
        return key;
    } catch (UnsupportedEncodingException e) {
        return key;
    }
}

Dies hat geholfen, sich zu erholen, die meisten Sonderzeichen sein, aber es gibt immer noch viele von Ihnen, die nicht korrekt angezeigt:

Lesen resourcebundle als UTF-8. getString () - Methode zu ändern scheint-encoding ISO-8859 -

Ich habe auch überprüft der content-type-Konfiguration der WebApp und jeder einzelne Antrag, der bekommt die Ressource bundles ist alles utf-8.

Hat jemand eine Idee, wie verhindern, dass die getString()-Methode aus der änderung der Kodierung oder gibt es einen besseren Weg, um dieses Problem zu lösen?

  • Wenn Ihr resourcebundles abgelegt werden in properties-Dateien: Java geht standardmäßig davon aus, dass Sie kodiert in ISO-8859.
  • Ich habe bereits herausgefunden durch die Kontrolle der Ausgänge. aber gibt es eine Möglichkeit zu zwingen, die getString-Methode zu Lesen, die Zeichen als UTF-8 und nicht ISO-8859 -?
  • Ich denke, in Ihrem Fall das problem beginnt früher, wo Sie instanziieren das Ressourcen-bundle. Sie Lesen aus einem stream in ISO-Codierung, Java wandelt das UTF-8-strings, so liest den string als UTF-8 korrekt ist. (Siehe docs.oracle.com/javase/7/docs/api/java/util/...)
  • ja genau das ist, was ich tun will. aber weder die PropertiesResourcebundle noch die Control-Klasse hat jegliche Spezifikation zu ändern Lesung-encoding-format. Gibt es eine Möglichkeit, öffnen Sie das Paket als UTF-8 codiert`??
  • Laden Sie das Paket mit einem custom Control: stackoverflow.com/a/4660195/421245
InformationsquelleAutor izocan | 2014-07-31
Schreibe einen Kommentar