td5 - "OK ÉSI" et encodage de la console Netbeans
Sur ma machine (Linux, NB12.5), écrire ÉSI
(ou même ési
) affiche de la merde:
ça s'améliore si je déclare le Scanner avec:
Scanner clavier = new Scanner(System.in, Charset.forName("ISO-8859-1"));
mais ça reste mauvais avec un symbole euro € par exemple :
Alors j'ai tenté ça:
final InputStream in = System.in;
do {
int read = in.read();
System.out.println("Byte: " + read);
} while (in.available() > 0);
et quand je tape €
Netbeans me dit:
Byte: 172
Byte: 10
et ça n'a aucun sens pour moi ! J'ai cherché, je n'ai trouvé aucun charset dans lequel € est encodé par l'octet 172 (0xAC). En général on trouve l'octet 0xAC dans les variantes de UTF :
encodage | code |
---|---|
UTF-16 | feff20ac |
UTF-16BE | 20ac |
UTF-16LE | ac20 |
UTF-32 | 000020ac |
UTF-32BE | 000020ac |
UTF-32LE | ac200000 |
UTF-8 | e282ac |
Bref j'ai la furieuse impression que Netbeans reçoit le brol comme si c'était de l'UTF16BE... mais il ne garde qu'un octet sur deux !
☺ => 58 au lieu de 38 58
♥ => 101 au lieu de 38 101
⇒ => 210 au lieu de 33 210
𐐷 => 1 55 au lieu de 216 1 220 55
Qq ressources:
- https://www.epai-ict.ch/ict-modules/activities/m100-a2
- https://northcoder.com/post/java-console-output-with-utf-8/
- https://stackoverflow.com/questions/2415597/java-how-to-detect-and-change-encoding-of-system-console?noredirect=1&lq=1
Lancer Netbeans avec -J-Dfile.encoding=
suivi de utf-8 ou de latin-9 change des choses, mais je ne comprends précisément comment.
et je suis paumé entre la JVM de Netbeans, celle de Maven, celle de mon programme... c'est le bordel.