Récemment, j’me suis plongé sur un de mes projets en Java à la fac , une ptite simulation de compétitions. En temps normal, mon environnement de développement est Linux, étant donné que je suis familier avec Arch Linux depuis un bon bout de temps maintenant.

Mais il se trouve que mon PC actuel est sous Windows 11 avec WSL (Pour des raisons de g@ming principalement), en utilisant Ubuntu (c’est largement suffisant pour développer).

Du coup, je lance mon Makefile que j’avais fais pour l’occasion (requis par la fac), qui me génère un .jar exécutable, et quelle ne fut ma surprise quand je vois des “?” au lieu de “é” sur le terminal.

img1

Pareil avec PowerShell par ailleurs (ce qui m’étonnent pas vraiment vu ça doit utliser le même afficheur de caractères)

img2

Bizarre ? Il y a un souci dans mon code ? Je me souviens pas d’un tel bug, et si je l’avais vu je l’aurais très vite corrigé.

Après 20 minutes de recherche dans mon code et Google, je me souviens que j’avais activé une option pour les caractères non-unicode sur Windows, qui a été mis en japonais, pour faire marcher LR2 qui est un vieux lecteur de fichiers BMS et qui fonctionne pas très bien sans.

img3

En le mettant en Français (France), les accents sont revenus ! Youpiii !!!

Edit : J’avais prévu d’écrire un peu plus, mais pour une raison que j’ignore, je peux plus reproduire ce je voulais dire, du coup bah … ? Tant mieux j’imagine ? Il se trouvait que le mettre en Français (France) n’avait pas suffit à régler le souci, et m’avait remplacé le é par テゥ, qui est juste n’importe quoi d’après ce site et j’ai dû cocher la case en bêta visible sur la capture d’écran plus haut.

Pendant mes petites recherches, je suis tombé sur cette page qui explique que les caractères non-ASCII sont mal gérés sur les applications en ligne de commande qui utilisent la librairie standard de Windows, comme Java du coup, pour la simple raison que le terminal de Windows, qui utilise la “page de code” (apparemment un vieux terme, mais bon je viens de le découvrir) 850 dans mon cas, et qui correspond à la table de caractère utilisé par DOS en Europe.

Le page code 850 contient entre 0 et 127 :

img4

Le page code 437 est affiché car ce sont les mêmes. Le page code 850 contient en plus, de 128 à 255 :

img5

Les caractères en jaunes sont les différences avec le page code 437.

De plus, je suis tombé sur cette page, et plus particulièrement cet article, qui fait l’historique des encodages des caractères.

J’ai appris pas mal de choses, en particulier que l’UTF-8 n’était ni plus ni moins de l’ASCII avec des “Codes Points” Unicode, et que l’Unicode de manière générale n’est pas une table d’encodage de caractères, mais juste une table contenant pleins de caractères.

Cette mini aventure m’a paru un peu fascinant, c’est pour ça que j’ai voulu écrire un peu histoire de pas trop oublier !