System.out.println() affiche le texte dans le codage par défaut du système, mais la console interprète cette sortie en fonction de son propre réglage de codage (ou « code »). Sur votre machine Windows, les deux encodages semblent correspondre, mais sur la machine Linux, la sortie est apparemment en UTF-8 tandis que la console est en train de le décoder comme un codage à un octet comme ISO-8859-1. Ou peut-être, comme Jon l'a suggéré, le fichier source est en train d'être enregistré en UTF-8 et javac
le lit comme quelque chose d'autre, un problème qui peut être évité en utilisant des échappements Unicode.Lorsque vous avez besoin de produire autre chose que du texte ASCII, il est préférable de l'écrire dans un fichier en utilisant un encodage approprié, puis de lire le fichier avec un éditeur de texte - les consoles sont trop limitées et trop dépendantes du système. En passant, ce bit de code:
new String("¿".getBytes("UTF-8"), "UTF-8")
... n'a aucun effet sur la sortie. Tout ce que cela fait est d'encoder le contenu de la chaîne dans un tableau d'octets et de le décoder à nouveau, en reproduisant la chaîne d'origine - un no-op coûteux. Si vous voulez sortir du texte dans un encodage particulier, vous devez utiliser un OutputStreamWriter, comme ceci:
FileOutputStream fos = new FileOutputStream("out.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
+1. J'ai récemment vu affiché comme C2A0 et est allé wtf. – Amarghosh