Codage de caractères par défaut pour la sortie de la console java

Comment Java déterminer le codage utilisé pour System.out?

Compte tenu de la classe suivante:

import java.io.File;
import java.io.PrintWriter;

public class Foo
{
    public static void main(String[] args) throws Exception
    {
        String s = "xxäñxx";
        System.out.println(s);
        PrintWriter out = new PrintWriter(new File("test.txt"), "UTF-8");
        out.println(s);
        out.close();
    }
}

Il est enregistré en UTF-8 et compilé avec javac -encoding UTF-8 Foo.java sur un système Windows.

Ensuite sur un git-bash console (en utilisant UTF-8 charset) je fais:

$ java Foo
xxõ±xx
$ java -Dfile.encoding=UTF-8 Foo
xxäñxx
$ cat test.txt
xxäñxx
$ java Foo | cat
xxäñxx
$ java -Dfile.encoding=UTF-8 Foo | cat
xxäñxx

Ce qui se passe ici?

Évidemment java vérifie si il est connecté à un terminal et est en train de changer son encodage dans ce cas. Est-il un moyen de forcer Java pour simplement la sortie de la plaine de l'UTF-8?


J'ai essayé la même chose avec la console cmd, trop. Rediriger STDOUT ne semble pas faire toute la différence. Sans le fichier.le paramètre d'encodage, il renvoie le codage ansi avec le paramètre sorties de l'encodage utf8.

  • System.out code octets à l'aide de la encodage par défaut. Parfois, c'est même l'encodage utilisé par la console.
  • Mais pourquoi ne java Foo sortie de quelque chose de différent que java Foo|cat? - Le codage par défaut devrait être le même.
  • avez-vous assurer que vous avez réellement enregistré le fichier en utilisant l'encodage utf-8? c'est généralement une mauvaise idée de dépendre sur la source du fichier encodages. pour être vraiment sûr, définir la chaîne à l'aide de "\u" échappe.
InformationsquelleAutor michas | 2014-07-17