[JAVA] Hinweise zum Arbeiten mit UTF-8-codierten Eigenschaftendateien

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.

Referenz

Recommended Posts

Hinweise zum Arbeiten mit UTF-8-codierten Eigenschaftendateien
Hinweise zu Protokollpuffern
Python-Memo auf Docker
[Android] Hinweise zu XML
Hinweise zur Mehrfachvererbung
Hinweise zu regulären Ausdrücken