lire resourcebundle en UTF-8. Méthode getString() semble changer l'encodage ISO-8859

J'ai l'honorable cession de modifier le codage de notre espace de travail, les projets et les fichiers de l'encodage UTF-8. Nous avons plusieurs regroupements resourcebundle qui utilisé pour coder les caractères spéciaux unicode. Nous avons aussi voulu se débarrasser de l'unicode des trucs par passer à l'UTF-8, donc j'ai changé l'encodage des regroupements resourcebundle (.les propriétés) des fichiers trop et remplacé les caractères Unicode.

Nous avons aussi allemand regroupements resourcebundle et certains caractères comme

Ä, Ö, Ü, ß. ä, ö, ü et aussi les caractères spéciaux comme " ou "

ne sont pas affichés correctement dans le navigateur. Exemple:

Resourcebundleentry:

executeShellCommand.label = Shellkommando ausführen

Résultat dans le navigateur:
lire resourcebundle en UTF-8. Méthode getString() semble changer l'encodage ISO-8859

Les regroupements resourcebundle sont lus avec le Java.util.ResourceBundle.getString(String key) Méthode:

    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;
    }
}

Si je vérifie le résultat de l'Sysout-je obtenir suivantes:
getLocalizedString, key: executeShellCommand.label, resourcebundle: Shellkommando ausführen

Il semble que la getString(clé) méthode modifie le codage des caractères lors de la lecture de de forfaits à la norme resourcbundleencoding(ISO-8859).

J'ai essayé de lutte contre ce problème:

    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;
    }
}

Cela l'a aidé à récupérer la plupart des caractères spéciaux, mais il y a encore beaucoup d'entre eux qui ne sont pas affichés correctement:

lire resourcebundle en UTF-8. Méthode getString() semble changer l'encodage ISO-8859

J'ai aussi vérifié le contenu-type de configuration de l'Application web et de chaque demande unique qui obtient les regroupements de ressources tout est en utf-8.

Quelqu'un a une idée de comment empêcher la getString()-Méthode de modification de l'encodage ou est-il une meilleure façon de résoudre ce problème?

Si votre regroupements resourcebundle sont stockées dans des fichiers de propriétés: Java suppose par défaut que ils sont codés en ISO-8859.
J'ai déjà pensé à elle en contrôlant les sorties. mais est-il un moyen de forcer la méthode getString à lire les caractères en UTF-8 et pas en ISO-8859?
Je pense que dans ton cas, le problème commence plus tôt lorsque vous instanciez le regroupement de ressources. Vous avez à lire à partir d'un flux dans la norme ISO-encodage; Java convertit en UTF-8 dans les chaînes, donc, la lecture de la chaîne de caractères en UTF-8 est correct. (Voir docs.oracle.com/javase/7/docs/api/java/util/...)
oui, c'est exactement ce que je veux faire. mais ni l'PropertiesResourcebundle ni la classe de Contrôle a une spécification de changer la lecture de format de codage. Est-il possible d'ouvrir l'ensemble codé en UTF-8`??
Charger le bundle avec un Contrôle personnalisé: stackoverflow.com/a/4660195/421245

OriginalL'auteur izocan | 2014-07-31