Lesen Sie das Ressourcenpaket als UTF-8. Die Methode getString () scheint die Codierung in ISO-8859 zu ändern
Ich habe die ehrenvolle Aufgabe, die Kodierung unseres gesamten Arbeitsbereichs, unserer Projekte und Dateien auf die UTF-8-Kodierung umzustellen. Wir haben mehrere Resourcebundles, mit denen spezielle Zeichen mit Unicode codiert wurden. Wir wollten dieses Unicode-Zeug auch loswerden, indem wir auf UTF-8 umstellten, also änderte ich auch die Codierung der Resourcebundles-Dateien (.properties) und ersetzte die Unicode-Zeichen.
Wir haben auch deutsche Ressourcenbündel und einige Zeichen wie
Ä, Ö, Ü, ß. ä, ö, ü und auch Sonderzeichen wie „oder“
werden im Browser nicht richtig angezeigt. Beispiel:
Ressourcenbundleentry:
executeShellCommand.label = Shellkommando ausführen
Ergebnis im Browser:
Die Ressourcenbundles werden mit der Java.util.ResourceBundle.getString (String key) -Methode gelesen:
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 die Ausgabe des obigen Sysout überprüfe, erhalte ich folgendes:getLocalizedString, key: executeShellCommand.label, resourcebundle: Shellkommando ausführen
Es scheint, dass dieDie Methode getString (key) ändert die Kodierung der Zeichen beim Lesen Sie werden aus den Bundles in die Standard-Resourcebundleencodierung (ISO-8859) übernommen.
Ich habe versucht, diesem Problem entgegenzuwirken:
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, die meisten Sonderzeichen wiederzugewinnen, aber es gibt immer noch eine Menge von ihnen, die nicht richtig angezeigt werden:
Ich habe auch die Content-Type-Konfiguration der WebApp überprüft und für jede einzelne Anforderung, die die Ressourcenpakete abruft, ist alles utf-8.
Hat jemand eine Idee wieVerhindern, dass die getString () - Methode die Codierung ändert Oder gibt es einen besseren Weg, um dieses Problem zu lösen?