[JAVA] Remarques sur l'utilisation des fichiers de propriétés encodés en UTF-8

Je ne veux pas utiliser la commande native2ascii, mais je ne veux pas échapper à unicode ... Une note concernant les fichiers de propriétés encodés en UTF-8.

Si vous gérez le fichier de propriétés contenant des caractères multi-octets tel quel, les caractères seront déformés. Préparez une sous-classe qui hérite de la classe ResourceBundle.Control. J'ai donc remplacé la méthode newBundle () dans la sous-classe préparée et spécifié le codage UTF-8. Implémenter pour gérer les objets InputStreamReader.

ResourceBundleWithEncording.java


/**
 * UTF-8 Générer un objet ResourceBundle à partir d'un fichier de propriétés codé
 */
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);
         }
     }
}

Après cela, spécifiez simplement l'objet de sous-classe créé dans l'argument de la méthode ResourceBundle.getBundle.

hoge.java


ResourceBundle rb = ResourceBundle.getBundle("resources", Locale.locale,  new ResourceBundleWithEncording());

C'est tout.

Cependant, Java 9 a finalement changé le code de caractère par défaut de ResourceBundle en UTF-8, donc le tour futur sera Ça ne ressemble pas beaucoup.

référence

Recommended Posts

Remarques sur l'utilisation des fichiers de propriétés encodés en UTF-8
Remarques sur les tampons de protocole
mémo python sur docker
[Android] Notes sur xml
Remarques sur l'héritage multiple
Notes sur les expressions régulières