web-dev-qa-db-fra.com

Comment forcer un fichier jar à utiliser (ou le fichier jvm dans lequel le fichier jar est exécuté) utf-8 au lieu du codage par défaut du système

Le codage par défaut de Windows est GBK et mon Eclipse est totalement codé en utf-8.
Ainsi, une application qui fonctionne bien dans mon Eclipse se bloque car les mots deviennent illisibles lorsqu’ils sont exportés sous forme de fichier jar;
Je dois écrire la ligne suivante dans un fichier .bat pour exécuter l'application

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

Maintenant, ma question est la suivante: puis-je écrire quelque chose dans le code source pour définir les utilisations de l'application (ou le jvm s'exécute dans) utf-8 au lieu du codage par défaut du système.

20
Aloong

Lorsque vous ouvrez un fichier en lecture, vous devez spécifier explicitement le codage que vous souhaitez utiliser pour la lecture du fichier:

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

Alors, la valeur du codage de plate-forme par défaut (que vous pouvez modifier en utilisant -Dfile.encoding) n’a plus.

Remarque:  

Je recommanderais normalement de toujours de spécifier explicitement le codage pour toute opération qui dépend des paramètres régionaux, tels que les caractères d'E/S. De nombreuses méthodes d'API Java utilisent par défaut le codage de la plateforme, ce que je considère comme une mauvaise conception, car le codage de la plateforme n'est souvent pas le bon.

Alors, dites toujours quel encodage vous voulez.

Il existe des cas où le codage de la plate-forme est le bon (par exemple, lors de l'ouverture du fichier que l'utilisateur vient de créer pour vous), mais ils sont assez 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 (ouah). La liste des encodages possibles dépend de la machine virtuelle Java, mais chaque machine virtuelle est garantie d'avoir au moins:

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

16
sleske

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

Voici un exemple pour NetBeans. 

Allez dans Projet >> Propriétés >> Exécuter >> _ VM Options et tapez -Dfile. encoding=UTF-8

Ensuite, tout est encodé dans UTF-8 à chaque démarrage de Java VM.

(Je pense qu'Eclipse offre la même possibilité. Sinon, il suffit de rechercher Google dans VM Options.)

 enter image description here

0
Andrei