Utiliser le même encodage dans windows (cp1252) et dans les consoles

Problèmes

Incompatibilités d'encodage entre code source et fenêtre d'exécution <html> <p align=“justify”> Par défaut, la version française de windows utilise l'encodage de caractères “<b>windows-1252</b>”(appelé aussi cp1252) pour afficher les caractères accentués. C'est cet encodage qui est utilisé par “défaut dans tous les fichier et applications qui tournent sous windows, 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 les consoles (appelées aussi terminaux ou fenêtres DOS… et que l'on obtient en tapant cmd dans ) et qui servent notamment à lancer des programmes et à gérer leurs affichages en sortie ; l'encodage utilisé dans ces consoles est le <b>cp850</b> qui correspond (pour ceux ont connu l'époque 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. </p> </html>

Divergence d'encodage au clavier <html> <p align=“justify”> L'encodage par défaut des consoles (cp850 par défaut) 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. </p> </html>

<html><br></html>

Solution

<html> <p align=“justify”> 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 <b>cp850</b> vers <b>cp1252</b>. </p> </html> Méthode basique Il suffit pour cela de changer une clé de la base de registre. Plus précisément, 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. 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” et enfin de rebooter 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”.