92 votes

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

Problème

Comment faire git log s'affiche correctement à l'invite de commande de Windows ?

Exemple

git commands sequence leading to the problem Comme vous pouvez le voir, je peux taper les caractères diacritiques correctement mais sur git log la sortie est en quelque sorte échappée. Selon UTF-8 table de codage les codes entre parenthèses angulaires ( < et > ) de la sortie correspondent à l'entrée précédemment tapée git config paramètres.

J'ai essayé de mettre LESSCHARSET à la variable d'environnement utf-8 comme suggéré dans une des réponses à un problème similaire mais la sortie est brouillée :

git log output after setting LESSCHARSET=utf8

Je sais. .git/config est encodé correctement avec utf-8 car elle est gérée par gitk comme prévu.

Proper gitk output

Voici locale la sortie 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=

EDIT :

Le résultat est le même en version pure git-bash :

enter image description here

Je pense donc que le problème est indépendant du shell et qu'il est lié à Git ou à sa configuration elle-même.

2 votes

0 votes

Oui, j'ai essayé plusieurs pages de code dont 65001 (UTF-8) sans résultat. Il semble que la commande chcp n'ait aucune influence sur l'affichage de la sortie du journal git. Il est toujours affiché de la même manière.

1 votes

Désolé si la question semble stupide, mais pourquoi utilisez-vous l'invite de commande de Windows au lieu de Git Bash ? Il est mieux adapté à l'utilisation de Git, la fenêtre est redimensionnable jusqu'en plein écran, l'invite vous montre automatiquement sur quelle branche vous êtes, etc.

161voto

kriegaex Points 6365

Ok, j'ai expérimenté un peu et j'ai découvert que les commandes Git de Windows ont en fait besoin de variables UNIX telles que LC_ALL afin d'afficher correctement le polonais (ou d'autres caractères UTF-8). Essayez simplement cette commande :

set LC_ALL=C.UTF-8

Puis appréciez le résultat. Voici ce qui s'est passé sur ma console (police "Consolas", non chcp nécessaire) :

Windows console CMD


Mise à jour :

  • Eh bien, pour que les commandes Windows comme type (affichage du fichier sur la console) pour fonctionner correctement, vous avez besoin de chcp 65001 .
  • Et si vous préférez les commandes de Git Bash comme cat vous profitez de ce qui précède set LC_ALL=C.UTF-8 .

Windows console CMD, part 2


Mise à jour 2 : Comment rendre les changements permanents

En tant qu'utilisateur mono blaine dit, créez une variable d'environnement LC_ALL et lui attribuer la valeur C.UTF-8 soit globalement, soit pour votre propre profil d'utilisateur uniquement (désolé pour la capture d'écran en allemand) :

Create environment variable

La prochaine fois que vous ouvrirez la console d'un processeur de commande (cmd.exe), vous devriez voir la valeur de la variable en lançant la commande suivante echo %LC_ALL% . Dans PowerShell, vous devriez le voir en lançant la commande $env:LC_ALL .

La façon la plus simple de rendre la page de code UTF-8 permanente est d'ouvrir la page de code suivante regeedit et ajoutez une nouvelle valeur nommée Autorun de type chaîne de caractères à la section HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor et lui attribuer la valeur chcp 65001 .

Registration editor

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).

Au fait : Afin d'afficher correctement un fichier encodé en 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).

0 votes

Définir LC_ALL n'est pas nécessaire à git lui-même. D'autres outils -- fournis avec l'installation de git -- comme less qui est le pager par défaut / voir pager.core utilisent le LC_ALL valeur. Les autres valeurs valides sont la langue localisée, par exemple : LC_ALL=de_DE.UTF-8 pour les Allemands.

1 votes

Vous pouvez définir la variable d'environnement à partir de la ligne de commande en utilisant setx LC_ALL C.UTF-8

0 votes

Powershell 6 dans ConEmu, il suffisait d'ajouter $env.LC_ALL='ClUTF-8' à $Profile

70voto

mono blaine Points 503

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 le rendre permanent, deux possibilités :

  • créer une variable d'environnement nommée LC_ALL avec la valeur C.UTF-8
  • ou mettre $env:LC_ALL='C.UTF-8' dans votre $Profile fichier

1 votes

Ou bien 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).

3 votes

Le fichier de profil peut être édité en exécutant par exemple : notepad $profile Puis ajoutez une ligne quelque part comme mono blaine l'a suggéré, $env:LC_ALL='C.UTF-8'.

0 votes

Avec PowerShell 6 + ConEmu sur Windows 10 : cela fonctionne, rien d'autre n'était nécessaire

7voto

Ayşe Nur Points 11

J'utilise Git via Powershell Core v7.0.3 à l'intérieur de Terminal Windows sur Windows 10.

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

Ces solutions fonctionnent toutes 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.

1 votes

Merci pour la mise en place de Git. Les paramètres Git fonctionnent pour moi, mais j'ai aussi trouvé que le paramètre $env:LESSCHARSET='utf-8' fonctionne bien aussi pour le PowerShell 5 dans le terminal Windows.

5voto

W.Perrin Points 381

J'utilise git bash sur WIN10 . En ce qui me concerne, les 4 réglages correspondent à mes attentes.

  • env réglage. Ajouter LC_ALL=C.UTF-8 , LESSCHARSET=UTF-8 à PATH globalement.

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

  • git bash réglage. Régler Options-> Text-> Character set à utf-8 . Ou bien locale et Character set à la fois pour default . Il est assez intelligent pour choisir le bon encoding .

C'est fait.

0 votes

J'utilise git dans l'invite de commande de Windows, et les deux premières étapes ont résolu le problème dans mon cas.

0voto

Ashark Points 200

J'ai eu ce problème sous Linux. Et le problème était que je n'avais pas généré de locales. Ainsi, ma sortie de locale contenait toutes les lettres "C", sans UTF-8. Pour résoudre ce problème, j'ai décommenté en_US.UTF-8 et ru_RU.UTF-8 dans /etc/locale.gen. J'ai ensuite exécuté localectl set-locale LANG=ru_RU.UTF-8 et redémarré. Et je me suis reconnecté au système. Après cela, Ciryllic s'est affiché normalement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X