Changer la page de code par défaut de la console Windows en UTF-8

124

Actuellement, j'utilise Windows 7 x64 et je souhaite généralement que tous les outils de la console fonctionnent avec UTF-8 plutôt qu'avec la page de code par défaut 850.

Exécuter chcp 65001dans l'invite de commande avant d'utiliser n'importe quel outil aide, mais existe-t-il un moyen de définir une page de code par défaut?

Mise à jour:

Changer la HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPvaleur pour 65001rendre le système incapable de démarrer dans mon cas.

Proposition de modification HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorunà @chcp 65001>nulservi juste bien pour mon but. (merci à Ole_Brun )

Régent
la source
Notez que la solution proposée pourrait casser le fichier find.exe de Windows (ce qui causerait des problèmes avec la compilation du SDK Android): superuser.com/questions/176737/…
J Rao
Hm, quand j'utilise chcp 65001 mes fenêtres de console plantage quand je fais dir, mais il est utile de commencer simplement cmd.exe avec le drapeau / u (nb: il utilise unicode par elle ne se reflète pas dans la production de chcp.com)
Eckes
10
La console Windows est truffée de bogues lorsque le codage est défini sur une page de codes multi-octets non prise en charge, telle que 65001. Tout logiciel utilisant le décompte en sortie des API Win32 WriteFile / ReadFile obtiendra des résultats erronés et, partant, s'appuiera sur celui-ci, comme le MSVCRT. L'implémentation de stdlib produira une sortie mutilée / répétée et restera suspendue à l'entrée lorsqu'elle est confrontée à du non-ASCII. Jusqu'à ce que MS finisse par le réparer - et cela fait des décennies que rien ne le laisse présager -, changer globalement la page de code de la console en 65001 est une très mauvaise idée .
Bobince
2
Toute utilisation des Aversions des fonctions Windows est interrompue. Tout le code doit être porté pour utiliser les Wversions.
Demi
1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPest utilisé comme solution de secours pour les environnements non-unicode (non-utf), vous essayez évidemment de le forcer à un "unicode", car vous voyez qu'il est controversé par définition. Windows se bloque probablement car certains éléments du système au démarrage dépendent du jeu de caractères non-unicode pour fonctionner.
venimus

Réponses:

99

Pour modifier la page de codes pour la console uniquement, procédez comme suit:

  1. Démarrer -> Exécuter -> regedit
  2. Aller à [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Remplacez la valeur par chcp 65001
Nils Magne Lunde
la source
1
@Regent Dans la question, la valeur de registre que vous avez indiquée et qui a fonctionné pour vous est @chcp 65001>nul, alors que dans cette réponse acceptée, elle l'est chcp 65001. Quelles sont les différences entre les deux?
galacticninja
7
@galacticninja en mettant simplement chcp 65001, chaque invite de commande ouverte imprimera 'Page de code active: 65001' tout @chcp 65001>nulen empêchant toute sortie.
Regent
7
Autorunn'est pas présent pour moi sous Windows 8.1.
kleinfreund
2
@kleinfreund @Luke: si Autorunn'est pas présent, vous pouvez ajouter une nouvelle valeur de chaîne avec le contenu de@chcp 65001>nul
Dacto
1
@ Dr.jacky Vous ne savez pas exactement ce qu'ils veulent dire par dangereux. Je viens de répondre à la question du PO. Si vous devriez le faire ou non, c'est une question différente. Je pense qu'il y a peut-être des problèmes avec Python. Vous voudrez peut-être vérifier cela avant de définir la page de codes au moins sur 65001.
Nils Magne Lunde
39

Personnellement, je n'aime pas changer de registre. Cela peut causer beaucoup de problèmes. J'ai créé un fichier batch:

@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS

J'ai enregistré à l' C:\Windows\System32adresse switch.bat.

J'ai créé un lien pour cmd.exe sur le bureau.

Dans les propriétés du raccourci cmd, modifiez la destination en: C:\Windows\System32\cmd.exe /k switch

Voilá, quand je dois taper en UTF-8, j'utilise ce lien.

juca
la source
7
Notez qu'il sera imprimé Active code page: 65001sur stdout. Donc, si vous faites quelque chose comme CHCP 65001 && mycommand.execela, vous obtiendrez la page de code imprimée au début. Vous devezCHCP 65001 >nul && mycommand.exe
frumbert
32

Fichier Reg:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. La valeur doit être en hex
  2. La ligne du haut doit être incluse exactement telle quelle
  3. HKEY_CURRENT_USER ne peut pas être abrégé
  4. dword ne peut pas être omis

Invite de commande:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. La valeur peut être en déc ou en hex
  2. % SystemRoot% doit être échappé
  3. REG_DWORD ne peut pas être omis

PowerShell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. La valeur peut être en déc ou en hex
  2. -Type DWord est supposé avec PowerShell 3+
  3. Peut utiliser ni -> New-Item
  4. Peut utiliser sp -> Set-ItemProperty
  5. Peut utiliser -ea 0 -> -ErrorAction Ignore

Cygwin:

regtool add '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe'
regtool set '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage' 65001
  1. La valeur peut être en déc ou en hex
  2. Peut utiliser / -> \
  3. Peut utiliser HKCU -> HKEY_CURRENT_USER
  4. Peut utiliser user -> HKEY_CURRENT_USER
Steven Penny
la source
Cela ne fonctionnait pas sous Windows 10. Ce qui fonctionne est de créer un autorun qui définit la page de code via la commande chcp.Eg,
George
Ce que je voulais dire avant la fin du montage a été programmé chcp 65001dans un fichier de commandes autorun. Voir stackoverflow.com/a/17405182/315083
George le
Le fait est que cela ne fonctionne que pour CMD, mais pas pour la console en tant que telle.
AnrDaemon le
5

La commande pour changer la page de code est chcp <codepage>. Exemple: chcp 1252. Vous devriez le taper dans une fenêtre Powershell. Pour éviter d'avoir à le taper à chaque fois (si vous devez toujours modifier la page de codes), vous pouvez l'ajouter à la ligne de commande du programme. Pour ce faire, procédez comme suit:

  1. Cliquez avec le bouton droit de la souris sur l'icône Powershell dans le menu Démarrer et choisissez "Plus"> "Ouvrir l'emplacement du fichier".
  2. Cliquez avec le bouton droit sur le raccourci Powershell et sélectionnez "Propriétés".
  3. Ajoutez les éléments suivants à la fin de la ligne de commande "Target": -NoExit -Command "chcp 1252"

Soyez heureux. Ne vous mêlez pas du registre Windows à moins que vous n'ayez aucune autre option.

JColares
la source
Celui-ci a parfaitement fonctionné pour moi. -NoExit -Command "chcp 1252 > null"omet également le message concernant la page de code sélectionnée au début.
CodeMonkey
5

Pour ce faire, créez un profil PowerShell et ajoutez-y la commande "chcp 65001> $ null":

PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile

Cela ne nécessite pas de modification du registre et, contrairement à la modification de raccourci, fonctionne si PowerShell est démarré dans un dossier spécifique à l'aide du menu contextuel de l'Explorateur Windows.

Fréon Sandoz
la source
1
@PimpJuiceIT, no .. voir la première ligne de cette réponse.
Dacto
4

Dans la version 1809 de Windows 10, j'ai réussi à résoudre ce problème de manière permanente en allant dans le système Language settings, en sélectionnant Administrative language settings, en cliquant Change system locale...et en cochant la Beta: Use Unicode UTF-8 for worldwide language supportcase puis en redémarrant mon ordinateur.

De cette façon, cela s'applique à toutes les applications, même celles que je ne démarre pas à partir d'une invite de commande!
(Ce qui était nécessaire pour moi, car j'essayais de modifier le code Agda d'Atom.)

Isti115
la source