web-dev-qa-db-fra.com

problèmes d'encodage de la sortie du journal git à l'invite de commande Windows 10

Problème

Comment rendre la sortie de la commande git log correctement affichée à l’invite de commande Windows?

Exemple

 git commands sequence leading to the problem Comme vous pouvez le voir, je peux taper correctement les caractères diacritiques mais sur git log, la sortie est échappée. Selon UTF-8 table de codage les codes entre les crochets (< et >) de la sortie correspondent aux paramètres git config précédemment saisis.

J'ai essayé de définir la variable d'environnement LESSCHARSET sur utf-8 comme indiqué dans une des réponses au problème similaire mais le résultat est alors tronqué:

 git log output after setting LESSCHARSET=utf8

Je sais que .git/config est correctement codé avec utf-8 car il est géré par gitk comme prévu.

 Proper gitk output

Voici la sortie de la commande locale si nécessaire

LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=

MODIFIER:

La sortie est la même aussi dans pure git-bash:

 enter image description here

je pense donc que le problème est indépendant de Shell et concerne Git ou sa configuration elle-même.

45
Marcin Kłopotek

D'accord, j'ai un peu expérimenté et découvert que les commandes Windows Git avaient besoin de variables UNIX telles que LC_ALL pour pouvoir afficher correctement le polonais (ou d'autres caractères UTF-8). Essayez juste cette commande:

set LC_ALL=C.UTF-8

Alors profitez du résultat. Voici ce qui s'est passé sur ma console (police "Consolas", pas de chcp nécessaire):

 Windows console CMD


Mettre à jour:

  • Eh bien, pour que les commandes Windows telles que type (fichier d’affichage sur la console) fonctionnent correctement, vous avez besoin de chcp 65001.
  • Et si vous préférez les commandes de Git Bash telles que cat, vous profitez du set LC_ALL=C.UTF-8 susmentionné.

 Windows console CMD, part 2


Mise à jour 2: Comment rendre les modifications permanentes

Comme l'utilisateur blaine mono} _ a dit, créez une variable d'environnement LC_ALL et attribuez-lui la valeur C.UTF-8, globalement ou uniquement pour votre propre profil utilisateur (désolé pour la capture d'écran en allemand):

 Create environment variable

La prochaine fois que vous ouvrirez une console du processeur de commande (cmd.exe), vous devriez voir la valeur de la variable lors de l'exécution de la commande echo %LC_ALL%. Dans PowerShell, vous devriez le voir lors de l’émission de $env:LC_ALL.

Le moyen le plus simple de rendre permanente la page de code UTF-8 consiste à ouvrir regeedit et à ajouter une nouvelle valeur nommée Autorun de type chaîne à la section HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor et à lui affecter la valeur chcp 65001.

 Registration editor

Désormais, cette commande sera exécutée à chaque fois que vous ouvrez une nouvelle console cmd.exe. Vous voyez même sa sortie dans la nouvelle fenêtre: "Aktive Codepage: 65001." (ou similaire dans votre langue respective).

Oh, au fait: pour afficher correctement un fichier encodé UTF-8 dans PowerShell, vous pouvez utiliser Get-Content -encoding UTF8 file.txt ou cat -encoding UTF8 file.txt (cat étant un alias pour Get-Content dans PowerShell).

91
kriegaex

Si quelqu'un est intéressé par l'équivalent PowerShell de set LC_ALL=C.UTF-8, c'est-à-dire:

$env:LC_ALL='C.UTF-8'

Cependant, cela ne fonctionne que pour la session en cours. Pour la rendre permanente, créez une variable d’environnement nommée LC_ALL avec la valeur C.UTF-8.

33
mono blaine

J'utilise git bash sur WIN10. Quant à moi, 4 réglages rendent l'apparence à la hauteur de mes attentes. 

  • env setting. Ajoutez LC_ALL=C.UTF-8, LESSCHARSET=UTF-8 à PATH globalement. 

  • git config. git config --global i18n.logOutputEncoding utf-8.

  • réglage git bash. Définissez Options-> Text-> Character set sur utf-8. Ou définissez locale et Character set tous les deux sur default. Il est assez intelligent de choisir la encoding correcte.

Terminé.

1
W.Perrin

Je devais utiliser l'invite de commande windows powershell au lieu de l'invite par défaut (Windowkey + X)

0
john ktejik