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-81), voir win-utf8.
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é 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 <samp>cmd</samp> 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 <b>cp850</b> 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é !). </p> <p align=“justify”> 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 (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. </p> <p align=“justify”> 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>
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> <p align=“justify”> 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 <samp>Propriétés</samp> dans le menu contextuel, aller dans l'onglet <samp>Polices</samp> 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 <samp>Propriétés</samp> dans le menu, aller dans <samp>Par défaut</samp>, et choisir l'une des polices True Type (<i>a priori</i> choisir “Consolas” ou “Lucida Console” selon son goût). </p> </html>
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
de850
à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éé encp1252.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 fichiercp1252.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
encp1252.reg
et de - lancer
regedit /s cp1252.reg
(ou double-clic sur le fichiercp1252.reg
).
— David PIOT 21/04/2020 22:48
chcp 65001
mais il n'est pas possible d'utiliser l'utf-8 comme OEMCP