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.