Problèmes de codage de sortie git log sur l'invite de commande Windows 10

88

Problème

Comment rendre la git logsortie de commande correctement affichée sur l'invite de commande Windows?

Exemple

séquence de commandes git menant au problème Comme vous pouvez le voir, je peux taper correctement les caractères diacritiques, mais git logla sortie est en quelque sorte échappée. Selon le UTF-8tableau de codage, les codes entre crochets ( <et >) de la sortie correspondent aux git configparamètres précédemment saisis .

J'ai essayé de définir LESSCHARSETla variable d'environnement sur utf-8comme suggéré dans l' une des réponses pour un problème similaire, mais la sortie est brouillée:

sortie du journal git après avoir défini LESSCHARSET = utf8

Je sais qu'il .git/configest correctement encodé utf-8car il est géré gitkcomme prévu.

Sortie gitk correcte

Voici la localesortie de commande 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=

ÉDITER:

La sortie est la même également en pure git-bash :

entrez la description de l'image ici

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

Marcin Kłopotek
la source
2
Avez-vous essayé la solution dans " Caractères Unicode dans la ligne de commande Windows - comment? "?
jthill
Oui, j'ai essayé plusieurs pages de codes dont 65001 (UTF-8) sans aucun résultat. Il semble que la commande chcp n'ait aucune influence sur la façon dont la sortie du journal git est affichée. Il est toujours affiché de la même manière.
Marcin Kłopotek
1
Désolé si la question semble stupide, mais pourquoi utilisez-vous l'invite de commande Windows au lieu de Git Bash? Il est mieux adapté à l'utilisation de Git, la fenêtre est redimensionnable en plein écran, l'invite vous montre automatiquement sur quelle branche vous vous trouvez, etc.
kriegaex
Ce n'est pas stupide @kriegaex, c'est bien en fait. J'utilise git-bash enveloppé dans ConEmu pour un usage quotidien. Le résultat est le même i.imgur.com/hMKz9D3r.png . J'ai décrit mon problème en donnant des exemples avec cmd.exe pour ne pas confondre les gens avec d'autres outils dépendants que j'utilise car je pense que le problème est indépendant du shell et concerne Git ou sa configuration elle-même.
Marcin Kłopotek

Réponses:

157

D'accord, j'ai expérimenté un peu et j'ai découvert que les commandes Windows Git ont réellement besoin de variables UNIX comme LC_ALLpour afficher correctement le polonais (ou d'autres caractères UTF-8). Essayez simplement 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 chcpnécessaire):

Console Windows CMD


Mise à jour:

  • Eh bien, pour que les commandes Windows telles que type(afficher le fichier sur la console) fonctionnent correctement, vous en avez besoin chcp 65001.
  • Et si vous préférez les commandes de Git Bash comme catvous bénéficiez de ce qui précède set LC_ALL=C.UTF-8.

Console Windows CMD, partie 2


Mise à jour 2: Comment rendre les modifications permanentes

Comme l'a dit l'utilisateur mono blaine , créez une variable d'environnement LC_ALLet attribuez-lui la valeur C.UTF-8, soit globalement, soit pour votre propre profil utilisateur uniquement (désolé pour la capture d'écran allemande):

Créer une variable d'environnement

La prochaine fois que vous ouvrez une console de processeur de commandes (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 $env:LC_ALL.

Le moyen le plus simple de rendre la page de codes UTF-8 permanente consiste à ouvrir regeeditet à ajouter une nouvelle valeur nommée Autorunde type chaîne à la section HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processoret à lui attribuer la valeur chcp 65001.

Éditeur d'inscription

Désormais, cette commande sera exécutée chaque fois que vous ouvrirez 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.txtou cat -encoding UTF8 file.txt( catétant un alias pour Get-ContentPowerShell).

Kriegaex
la source
Set LC_ALLn'est pas nécessaire par git lui-même. D'autres outils - fournis avec le git installaion - comme less, qui est le pager par défaut / see core.pager utilisent la LC_ALLvaleur. D'autres valeurs valides sont la langue localisée, par exemple: LC_ALL=de_DE.UTF-8pour les allemands.
retour42
1
vous pouvez définir la variable d'environnement à partir de la ligne de commande en utilisantsetx LC_ALL C.UTF-8
anion
Powershell 6 ConEmu, il suffisait d'ajouter $env.LC_ALL='ClUTF-8'à$Profile
Andrew Spencer
66

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

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

Cependant, cela ne fonctionne que pour la session en cours. Pour le rendre permanent, deux possibilités:

  • créer une variable d'environnement nommée LC_ALLavec la valeurC.UTF-8
  • ou mettez $env:LC_ALL='C.UTF-8'dans votre $Profiledossier
mono blaine
la source
1
Ou ajoutez-le à votre profil PowerShell (je préfère cela au paramètre global car j'utilise le même profil - via git - sur plusieurs machines).
Richard
3
Le fichier de profil peut être édité par exemple en exécutant: notepad $ profile Ensuite, ajoutez une ligne quelque part comme mono blaine suggéré, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad
Avec PowerShell 6 + ConEmu sur Windows 10: cela fonctionne, rien d'autre n'était nécessaire
Andrew Spencer
5

J'utilise git bashsur WIN10. Quant à moi, 4 réglages font l'apparence comme mes attentes.

  • envréglage. Ajouter LC_ALL=C.UTF-8, LESSCHARSET=UTF-8à PATHglobalement.

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

  • git bashréglage. Réglez Options-> Text-> Character setsur utf-8. Ou mis localeet les Character setdeux à default. Il est assez intelligent de choisir le bon encoding.

Terminé.

W.Perrin
la source
J'utilise l' gitinvite de commande Windows et les deux premières étapes ont résolu le problème pour mon cas.
nglee
5

J'utilise Git via Powershell Core v7.0.3 avec posh-git installé dans Windows Terminal sur Windows 10.

J'ai parcouru les réponses et essayé plusieurs d'entre elles. Les solutions qui ont fonctionné pour moi étaient:

Ces solutions fonctionnent toutes les deux séparément. J'ai choisi d'utiliser la commande Git car le problème semble être lié à Git, et le profil Powershell reste plus propre.

Ayşe Nur
la source
Merci pour le paramètre Git. Les paramètres Git fonctionnent pour moi, mais ont également constaté que le paramètre $env:LESSCHARSET='utf-8'fonctionne bien aussi pour PowerShell 5 dans le terminal Windows.
mloskot
0

J'ai dû utiliser l'invite de commande Windows PowerShell au lieu de celle par défaut (Windowkey + X)

john ktejik
la source
0

J'ai eu un tel problème sous Linux. Et le problème était que je n'avais pas généré de paramètres régionaux. Donc, ma sortie de localecontenait toutes les lettres "C", sans UTF-8. Pour résoudre cela, j'ai décommenté en_US.UTF-8et ru_RU.UTF-8dans /etc/locale.gen. Ensuite, je lance localectl set-locale LANG = ru_RU.UTF-8 et redémarré. Et reconnecté au système. Après cela, ciryllic était affiché normalement.

Un requin
la source