Ich möchte den Befehl native2ascii nicht verwenden, aber ich möchte kein Unicode-Escape verwenden ... Ein Hinweis beim Umgang mit UTF-8-codierten Eigenschaftendateien.
Wenn Sie die Eigenschaftendatei mit Mehrbytezeichen so behandeln, wie sie ist, werden die Zeichen verstümmelt. Bereiten Sie eine Unterklasse vor, die die ResourceBundle.Control-Klasse erbt. Also habe ich die newBundle () -Methode in der vorbereiteten Unterklasse überschrieben und die UTF-8-Codierung angegeben. Implementieren, um InputStreamReader-Objekte zu behandeln.
ResourceBundleWithEncording.java
/**
* UTF-8 Generieren Sie ein ResourceBundle-Objekt aus einer codierten Eigenschaftendatei
*/
public class ResourceBundleWithEncording extends ResourceBundle.Control {
private static final String SUFFIX = "properties";
private static final String ENCODE = "UTF-8";
@Override
public ResourceBundle newBundle(String baseName, Locale locale,
String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException {
String bundleName = toBundleName(baseName, locale);
String resourceName = toResourceName(bundleName, SUFFIX);
try (InputStream is = loader.getResourceAsStream(resourceName);
InputStreamReader isr = new InputStreamReader(is, ENCODE);
BufferedReader reader = new BufferedReader(isr)) {
return new PropertyResourceBundle(reader);
}
}
}
Geben Sie danach einfach das erstellte Unterklassenobjekt im Argument der ResourceBundle.getBundle-Methode an.
hoge.java
ResourceBundle rb = ResourceBundle.getBundle("resources", Locale.locale, new ResourceBundleWithEncording());
Das ist es.
Java 9 hat jedoch endlich den Standardzeichencode von ResourceBundle in UTF-8 geändert, so dass die zukünftige Runde sein wird Es sieht nicht nach viel aus.