2010-11-11 30 views
18

L'encodage par défaut de Windows est GBK, et mon Eclipse est totalement encodé en utf-8.
Donc, une application qui fonctionne bien dans mon Eclipse, se bloque parce que les mots deviennent illisibles lors de l'exportation en tant que fichier jar;
je dois écrire la ligne suivante dans un fichier .bat pour exécuter l'applicationComment forcer un jar à utiliser (ou jvm dans lequel jar s'exécute) utf-8 au lieu de l'encodage par défaut du système

start java -Dfile.encoding=utf-8 -jar xxx.jar  

Maintenant, ma question est que je peux écrire quelque chose dans le code source pour définir les utilisations d'application (ou la machine virtuelle Java fonctionne en) utf-8 au lieu de l'encodage par défaut du système.

+0

connexes http://stackoverflow.com/questions/361975/setting-the-default- java-character-encoding –

Répondre

15

Lorsque vous ouvrez un fichier pour la lecture, vous devez spécifier explicitement l'encodage que vous souhaitez utiliser pour la lecture du fichier:

Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8); 

Ensuite, la valeur de la plate-forme de codage par défaut (que vous pouvez modifier à l'aide -Dfile.encoding) n'a plus d'importance.

Note:

je recommande normalement toujours spécifier l'encodage explicitement pour toute opération qui dépend de la locale standard, tels que le caractère E/S. De nombreuses méthodes Java API par défaut à l'encodage de la plate-forme, que je considère comme une mauvaise conception, car souvent l'encodage de la plate-forme n'est pas le bon, et il peut changer soudainement (si l'utilisateur change de paramètres régionaux).

Donc, dites toujours quel encodage vous voulez.

Dans certains cas, le codage de la plateforme est le bon (par exemple, lors de l'ouverture d'un fichier que l'utilisateur vient de créer pour vous), mais ils sont plutôt rares.

Note 2:

java.nio.charset.StandardCharsets a été introduit en Java 1.7. Pour les anciennes versions de Java, vous devez spécifier le codage d'entrée en tant que chaîne (ugh). La liste des codages possibles dépend de la JVM, mais chaque JVM doit avoir au moins:

US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16.

+0

MERCI! Avant d'utiliser le '-Dfile.encoding', j'avais essayé le 'new String (octets []," UTF8 ");' peut-être que je ne l'utilisais pas partout donc je ne travaillais toujours pas. Juste maintenant j'ai essayé encore et réussi. – Aloong

+0

@Aloong: Heureux que cela a fonctionné pour vous. BTW, c'est "UTF-8", pas "UTF8". – sleske

0

Il existe un autre moyen. Si vous êtes sûr de la manière dont vous souhaitez encoder l'entrée et la sortie, vous pouvez enregistrer les paramètres avant de compiler votre fichier jar.

Voici un exemple pour NetBeans.

Aller au projet >> Propriétés >> Exécuter >> Options VM et tapez -Dfile. encoding=UTF-8

Après cela, tout est codé en UTF-8 chaque fois que la machine virtuelle Java est démarré.

(je pense Eclipse offre la même possibilité. Dans le cas contraire, il suffit de Google à Options VM.)

enter image description here