2010-07-22 6 views
4

J'ai la classe suivante en Java qui affiche « Bonjour tout le monde » en portugais:Java erreur caractères unicode dans cmd

public class PrintUnicode { 
    public static void main(String[] args) { 
     System.out.println("Olá Mundo!"); 
    } 
} 

J'utilise Eclipse, donc j'exporter le projet dans un fichier Jar Runnable. Après cela, je suis allé à cmd (Windows 7) et a couru le fichier jar généré.

Le résultat est:

Olß Mundo! 

est-il un moyen facile d'éviter cette erreur?

+0

Dans Eclipse, vous pouvez définir l'encodage du code source Java. Si vous ne le faites pas, le compilateur suppose un encodage par défaut et le texte peut être erroné. – Kwebble

+0

Je crois que ce n'est pas la raison. Même si vous modifiez le codage du fichier, l'erreur persiste. C'est un problème Java lors de la gestion des caractères Unicode avec System.out. Voir ma réponse ci-dessous. – fjsj

Répondre

5

Trouvé la solution. Il suffit de changer pour:

public class PrintUnicode { 
    public static void main(String[] args) { 
     System.console().printf("Olá Mundo!"); 
    } 
} 

L'erreur avec System.out se produit parce que:

Par défaut, Java encode Strings envoyé à System.out dans la page de code par défaut . Sous Windows XP, cela signifie une conversion avec perte de en une page "ANSI" code . C'est dommage, car l'invite de commande Windows (cmd.exe) peut lire et écrire des caractères Unicode. (source here)

+1

J'ai déjà travaillé sur ce problème en codant manuellement: 'System.out.write (myStr.getBytes (consoleCharset));' mais c'est beaucoup mieux. – helios