====== Utiliser le même encodage dans windows (cp1252) et dans les consoles ====== Ce qui suit nécessite d'être : * administrateur de sa machine et * sensibilisé aux difficultés d'intervention dans la base de registres. Ce qui suit concerne windows XP, windows 7 et windows 10. Dans le cas de windows 10, il est plutôt conseillé d'utiliser l'utf-8((sous windows XP et windows 7, il est possible de changer l'encodage en utf-8 en exécutant la commande ''chcp 65001'' mais il n'est pas possible d'utiliser l'utf-8 comme ''OEMCP'')), voir [[win-utf8]]. ===== Problèmes ===== ==== Incompatibilités d'encodage entre code source et fenêtre d'exécution ====

Par défaut, la version française de windows utilise l'encodage de caractères "windows-1252" (appelé aussi cp1252) pour afficher les caractères accentués. C'est cet encodage qui est utilisé dans tous les fichiers et applications qui tournent sous windows (sauf quand l'option existe, si un autre encodage a été explicitement demandé), ce qui est nécessaire pour la cohérence entre les fichiers et leur affichage sans avoir de conversion à réaliser. Par contre, ce n'est pas l'encodage qui est utilisé par défaut, dans la version française de windows, dans les consoles (appelées aussi terminaux ou fenêtres DOS... et que l'on obtient en tapant cmd dans la barre du menu "Démarrage") et qui servent notamment à lancer des programmes et à gérer leurs affichages en sortie ; l'encodage utilisé dans ces consoles est le cp850 qui correspond (pour ceux qui ont connu l'époque d'avant windows) avec l'encodage des caractères du DOS et qui est resté pour assurer la compatibilité avec de vieilles applications, la plupart en 16 bits (et qui ne fonctionnent même plus sous windows10, même en mode de compatibilité !).

Cela a un inconvénient, les textes, notamment les messages à afficher à l'écran dans un code source, contenant des caractères accentués qui sont saisis dans une application windows (p. ex. le bloc-notes) sont encodées en 1252 (du moins par défaut) et sont mal affichés dans la console, notamment lors de l'exécution du code compilé, car traités comme s'ils avaient été encodés en cp850.

==== Divergence d'encodage au clavier ====

L'encodage par défaut des consoles (donc cp850 dans la version française, sauf changement par l'utilisateur) est aussi utilisé lors de la frappe au clavier, y compris dans les applications windows qui sont en cp1252 par défaut, lorsque l'on utilise la touche "Alt" + nombre pour écrire le caractère correspondant au nombre, ce qui peut-être surprenant.

Par exemple, alors que le caractère "É" porte le numéro 201 dans l'encodage 1252, il faut taper Alt+144 pour le faire apparaître. En effet, 144 est le numéro de "É" dans l'encodage cp850 et ce dernier est l'encodage des consoles utilisé pour gérer le clavier, même si l'on est dans une application windows.

===== Solution =====

Dans une très large majorité des cas, le plus commode est d'utiliser le même encodage, et pour windows, et pour les consoles, et donc de changer l'encodage par défaut des consoles de cp850 vers cp1252.

Un préalable est nécessaire, en effet par défaut, les consoles sous win XP et 7 utilisent à l'affichage les "Polices Raster" qui n'affichent pas les caractères accentués. Ouvrir une console et cliquer avec le bouton droit sur la bande de titre de cette fenêtre puis ouvrir Propriétés dans le menu contextuel, aller dans l'onglet Polices et vérifier si "Polices Raster" est celle qui est activée. Dans ce cas, il faut changer la police par défaut ; pour cela, au dessus de Propriétés dans le menu, aller dans Par défaut, et choisir l'une des polices True Type (a priori choisir "Consolas" ou "Lucida Console" selon son goût).

=== Méthode basique === Il suffit pour cela de changer une clé de la base de registre : * dans le registre ''HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage'', * il faut changer la valeur de la clé ''OEMCP'' de ''850'' à ''1252''. En tant qu'administrateur, cela peut se faire manuellement, après avoir lancé ''regedit''. Penser à redémarrer windows pour la prise en compte de la nouvelle configuration. === Méthode conseillée === Une autre solution plus prudente, toujours en tant qu'administrateur, est : * d'exécuter, ''regedit /E cp1252.reg "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage"'', * de dupliquer le fichier ''cp1252.reg'' ainsi créé en ''cp1252.old'' pour sauvegarde, * de modifier ''cp1252.reg'' (p. ex. avec le bloc-notes) en changeant ''"OEMCP"="850"'' en ''"OEMCP"="1252"'', * puis de lancer ''regedit /s cp1252.reg'' (ou double-clic sur le fichier ''cp1252.reg'') * et enfin de redémarrer windows pour la prise en compte. Pour faire marche arrière si besoin, il suffit : * de renommer ''cp1252.old'' en ''cp1252.reg'' et de * lancer ''regedit /s cp1252.reg'' (ou double-clic sur le fichier ''cp1252.reg'').
--- //[[piot@emse.fr|David PIOT]] 21/04/2020 22:48//