Unicode (utf-8) avec git-bash

j'ai du mal à faire travailler unicode pour git-bash (sur windows 7). J'ai essayé beaucoup de choses sans succès. Bien que, je ne suis pas tout à fait sûr de ce qui est responsable pour cela, donc je pourrais travailler dans la mauvaise direction.

il semble vraiment que cela devrait être possible comme l'encodage pour cmd.exe peut être changé en unicode avec'chcp 65001'.

voici quelques choses que j'ai essayé (à part l'évidence de regarder à travers la configuration options dans l'interface graphique).

  1. variables d'environnement".bashrc". Je suppose que c'est logique que ça ne marche pas puisque je pense que c'est un truc linux. Le "locale" de la commande n'existe pas.

    export LC_ALL=en_US.UTF-8
    export LANG=en_US.UTF-8
    export LANGUAGE=en_US.UTF-8
    
  2. à partir de cmd.exe, changer l'encodage en unicode avec 'chcp 65001' et ensuite démarrer git-bash. Cela me fait obtenir une permission refusée en essayant de Catter mon fichier de test unicode. Cependant, cat un fichier sans unicode fonctionne très bien. Comme on l'a vu, je retourne au cmd.exe je peux toujours "cat" le dossier. En utilisant mon encodage par défaut (437), je peux Catter le fichier dans bash (pas de permission refusée mais la sortie est brouillée).

    S:>chcp 65001
    Active code page: 65001
    S:>"C:Program Files (x86)Gitbinsh.exe" --login -i
    zarac@TOWELIE /z
    cat /s/unicode.txt
    cat: write error: Permission denied
    zarac@TOWELIE /z
    cat /s/nounicode.txt
    abc
    zarac@TOWELIE /z
    L /s/unicode.txt
    -rw-r--r--    1 zarac    Administ        7 May 18 10:30 /s/unicode.txt
    zarac@TOWELIE /z
    whoami
    toweliezarac
    zarac@TOWELIE /z
    exit
    Z:>type S:unicode.txt
    abc£
    
  3. utiliser le drapeau /U lors du démarrage de l'interpréteur de commandes (c'est logique que cela ne fonctionne pas parce que ce n'est pas tout à fait ce que c'est si-je-comprends-correctement, mais ça a à voir avec unicode donc je l'ai essayé).

    C:WindowsSysWOW64cmd.exe /U /C "C:Program Files (x86)Gitbinsh.exe" --login -i
    
  4. comme je préfère utiliser Console2, j'ai essayé d'ajouter une valeur dword nommée CodePage avec la valeur 65001 (décimal) dans le registre de windows sous [HKEY_CURRENT_USERConsole] ainsi que [HKEY_CURRENT_USERConsoleGit Bash]. Cela semble avoir le même effet que de définir 'chcp 65001' accepter que c'est "automatique". (http://stackoverflow.com/questions/379240/is-there-a-windows-command-shell-that-will-display-unicode-characters)

  5. JPSOT's TCC / LE

  6. PowerCMD

  7. stackoverflow

  8. duckduckgo

  9. ixquick / google

ainsi, la méthode 2 semble viable si cette question de permission peut être corrigée. Cependant, je suis ouvert à peu près n'importe quelle solution bien que je préfère si je peux utiliser Console2 (principalement en raison de c'est chouette onglet). Peut-être qu'une solution serait de configurer un serveur SSH et d'utiliser Putty/Kitty pour s'y connecter, mais c'est tout simplement faux! ;)

PS. Y a-t-il des documents officiels pour git-bash?

37
demandé sur Hannes 2012-05-18 15:41:13

5 réponses

J'ai fait face au même problème dans MSYS Git 2.8.0 et comme il s'est avéré qu'il fallait juste changer la configuration.

$ git --version

git version 2.8.0.windows.1

la configuration par défaut de la console Git Bash dans mon système ne montrait pas de noms de fichiers Grecs.

$cd ~

$ls

AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
''$'6461'' '$'65636371617664'' '$'646775'@

la dernière ligne doit afficher" Τα ωγγραφά μου", la traduction grecque de"mes Documents". Pour le corriger, j'ai suivi les étapes suivantes:

  1. Vérifiez votre configuration locale existante

    $locale
    
    LANG=en
    LC_CTYPE="C"
    LC_NUMERIC="C"
    LC_TIME="C"
    LC_COLLATE="C"
    LC_MONETARY="C"
    LC_MESSAGES="C"
    LC_ALL=
    

    comme indiqué ci-dessus, dans mon cas, il n'était pas UTF-8

  2. changez la locale pour un encodage UTF-8. Cliquez sur L'icône sur le côté gauche de la barre de titre de MINGW, sélectionnez "Options" et dans la catégorie "texte", choisissez "UTF-8" jeu de caractères. Vous devez également choisir une police unicode, telle que la "Lucida Console"par défaut. Ma configuration ressemble comme suit: MinGW locale configuration

  3. changer la langue de la fenêtre actuelle (pas besoin de faire cela sur les fenêtres futures, car ils seront créés avec les paramètres de l'étape 2)

     $ LANG='C.UTF-8'
    
  4. la commande ls doit maintenant s'afficher correctement

    AppData/
    'Application Data'@
    Contacts/
    Cookies@
    Desktop/
    Documents/
    Downloads/
    Favorites/
    Links/
    'Local Settings'@
    NTUSER.DAT
    .
    .
    .
    'Τα έγγραφά μου'@
    
31
répondu nkatsar 2016-04-18 11:22:49

comme CharlesB l'a dit dans un commentaire, msysgit 1.7.10 gère unicode correctement. Il y a encore quelques problèmes, mais je peux confirmer que la mise à jour a résolu le problème que j'avais.

voir: https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support

7
répondu Hannes 2012-05-18 15:58:30

vérifier si le problème persiste avec L'Eig 2.1 (août 2014).

Voir commettre 617ce96 ou commettre 1c950a5 par Karsten Blees ( kblees )

Win32: prise en charge de la sortie de la console Unicode

WriteConsoleW semble être le seul moyen d'imprimer de manière fiable unicode à la console (sans conversion de page de code bizarre).

redirige aussi vfprintf vers la version winansi.c .

Win32: ajouter des fonctions de conversion Unicode

ajouter des fonctions de conversion Unicode pour convertir entre Windows natif UTF-16LE encodage en UTF-8 et retour.

pour prendre en charge les dépôts avec des noms de fichiers encodés en héritage, la fonction de conversion UTF-8 à UTF-16 essaie de créer des noms de fichiers uniques et valides, même pour les UTF-8 invalides . des séquences d'octets, de sorte que ces dépôts puissent être vérifiés sans erreur.

il est probable que ce soit un port de quelque chose déjà intégré dans msysgit, mais au moins cela signifie que la version Windows de Git n'aura pas à diverger/Patcher du code source principal de Git repo afin d'inclure ces améliorations.

5
répondu VonC 2014-08-02 19:27:58

je peux voir qu'il y a des problèmes avec l'encodage des caractères avec git bash pour windows. Moins pour le travail avec git lui-même et les outils qu'il expédie avec (curl, cat, grep etc.). Je n'ai pas rencontré de problèmes avec ceux-ci au fil des ans encodage des caractères liés.

normalement avec chaque nouvelle version les problèmes sont mieux résolus. Par exemple: avec la version d'il y a un an, je ne pouvais pas entrer des caractères comme ä dans le shell, donc il n'était pas possible d'écrire

echo "ä"

pour tester rapidement si UTF-8 est supporté et à quel niveau. Une solution consiste à écrire les bytes-séquences octal:

$ echo -e "0344"
ä

encore des problèmes que j'ai quand j'exécute mon Windows php.exe binaire à texte de sortie:

$ php -r 'echo "\xC3\xA4";'
ä

cela ne donne pas le " ä " dans le terminal, mais il sorties " ├ñ " à la place. La solution que j'ai pour cela, c'est que j'enroule la commande php dans un bash-script qui traite la sortie par cat :

#!/bin/bash

{ php.exe "$@" 2>&1 1>&3 | cat 1>&2; } 3>&1 | cat

réf. reg. stdout + stderr chat

Cela fait magiquement puis php fonctionne à nouveau:

$ php -r 'echo "\xC3\xA4";'
ä

S'applique à

$ git --version
git version 1.9.4.msysgit.1

je dois admettre que je manque une compréhension plus profonde Pourquoi c'est ainsi. Mais je suis enfin heureux que j'ai trouvé un contournement à utilisez php dans Git bash avec le support UTF-8.

3
répondu hakre 2017-04-13 12:36:27

a trouvé cette réponse ailleurs:

chcp.com 65001

Git bash rssa windows7 problème de codage

C'est ce qui l'a résolu pour moi.

1
répondu TravisChambers 2018-05-22 21:08:27