2008-09-17 7 views
9

Existe-t-il un moyen de modifier le codage utilisé par le constructeur String (byte [])?Modification du codage par défaut pour String (octet [])

Dans mon propre code j'utilise String (byte [], String) pour spécifier le codage mais j'utilise une bibliothèque externe que je ne peux pas changer.

String src = "with accents: é à"; 
byte[] bytes = src.getBytes("UTF-8"); 
System.out.println("UTF-8 decoded: "+new String(bytes,"UTF-8")); 
System.out.println("Default decoded: "+new String(bytes)); 

La sortie en est:

UTF-8 decoded: with accents: é à 
Default decoded: with accents: é à 

J'ai essayé de changer la propriété système file.encoding mais il ne fonctionne pas.

Répondre

7

Vous devez modifier les paramètres régionaux avant de lancer la machine virtuelle Java. voir:

Java, bug ID 4163515

Certains endroits semblent impliquer que vous pouvez le faire en définissant la variable file.encoding lors du lancement de la machine virtuelle Java, comme

java -Dfile.encoding=UTF-8 ... 

... mais je ne l'ai pas essayé ceci moi-même. Le moyen le plus sûr consiste à définir une variable d'environnement dans le système d'exploitation.

+0

Quelqu'un at-il essayé l'approche -Dfile.encoding? Ce serait génial de pouvoir le faire de manière agnostique. –

+0

@MattPassell Nous utilisons les arguments suivants lors du lancement de la JVM pour nous assurer que nous spécifions correctement UTF-8 partout: -Dfile.encoding = ISO646-US -Dsun.jnu.encoding = ISO646-US et il semble fonctionner correctement. –

+0

Merci pour la réponse. Est-ce que je manque quelque chose? J'ai juste googlé pour ISO646-US et j'ai découvert que c'est un nom officiel pour ASCII. Comment cela vous aide-t-il à utiliser UTF-8? –

1

cité de defaultCharset()

Le jeu de caractères par défaut est déterminée lors du démarrage de machine virtuelle et dépend généralement de la locale et charset du système d'exploitation sous-jacent.

Dans la plupart des systèmes d'exploitation, vous pouvez définir le jeu de caractères à l'aide d'une variable d'environnement.

+0

Pas vraiment la réponse que j'espérais (j'aurais aimé être capable de le faire dynamiquement). Donner un exemple de la façon de changer l'encodage pour les systèmes d'exploitation majeurs serait génial. Merci – Michel

1

Je pense que vous voulez ceci: System.setProperty ("file.encoding", "UTF-8");

Il a résolu quelques problèmes, mais j'en ai encore d'autres. Les caractères "í" et "Í" ne sont pas convertis correctement si le SO est ISO-8859-1. Juste avec l'option JVM au démarrage, je l'ai résolu. Maintenant, juste ma console Java dans l'EDI NetBeans est un jeu de caractères écrasant lors de l'affichage de caractères spéciaux.

Questions connexes