windows - Unicode(utf-8) con git-bash
(5)
Tengo problemas para hacer que Unicode trabaje para git-bash (en Windows 7). He intentado muchas cosas sin éxito. Aunque, no estoy muy seguro de qué es responsable de esto, así que podría estar trabajando en la dirección equivocada.
Realmente parece que esto debería ser posible ya que la codificación para cmd.exe se puede cambiar a unicode con ''chcp 65001''.
Aquí hay algunas cosas que he intentado (además de lo obvio de mirar a través de las opciones de configuración en la GUI).
Establecer variables de entorno en ''.bashrc''. Supongo que tiene sentido que esto no funcione, ya que creo que es algo de Linux. El comando ''locale'' no existe.
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8
Comenzando en cmd.exe, cambiando la codificación a unicode con ''chcp 65001'' y luego iniciando git-bash. Esto hace que obtenga un permiso denegado cuando trato de apropiarme de mi archivo de prueba Unicode. Sin embargo, catting un archivo sin unicode funciona bien. Como se demostró, volviendo a cmd.exe todavía puedo "cat" el archivo. Utilizando mi codificación predeterminada (437) puedo catalogar el archivo en bash (no se ha denegado el permiso pero la salida está distorsionada).
S:/>chcp 65001 Active code page: 65001 S:/>"C:/Program Files (x86)/Git/bin/sh.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 towelie/zarac zarac@TOWELIE /z exit Z:/>type S:/unicode.txt abc£
Usando la bandera / U cuando se inicia el shell (tiene sentido que no funcione porque no es lo que es para if-i-understand-correctamente, pero tiene que ver con unicode, así que lo intenté).
C:/Windows/SysWOW64/cmd.exe /U /C "C:/Program Files (x86)/Git/bin/sh.exe" --login -i
Como prefiero usar Console2, intenté agregar un valor dword llamado CodePage con el valor 65001 (decimal) al registro de Windows en [HKEY_CURRENT_USER / Console] así como a [HKEY_CURRENT_USER / Console / Git Bash]. Esto parece tener el mismo efecto que establecer que ''chcp 65001'' acepte que es "automático". (http://stackoverflow.com/questions/379240/is-there-a-windows-command-shell-that-will-display-unicode-characters)
TCC / LE de JPSoft
PowerCMD
desbordamiento de pila
Pato Pato a ganar
ixquick / google
Entonces, el método 2 parece viable si se puede corregir ese problema de permiso. Sin embargo, estoy abierto a casi cualquier solución aunque prefiero si puedo usar Console2 (debido principalmente a su característica de pestaña ingeniosa). Quizás una solución sea configurar un servidor SSH y luego usar Putty / Kitty para conectarse, ¡pero eso está mal! ; )
PD. ¿Hay alguna documentación oficial para git-bash?
Como dijo CharlesB en un comentario, msysgit 1.7.10 maneja el Unicode correctamente. Todavía hay algunos problemas, pero puedo confirmar que la actualización resolvió el problema que estaba teniendo.
Ver: https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support
Compruebe si el problema persiste con Git 2.1 (agosto de 2014).
Ver commit 617ce96 o commit 1c950a5 por Karsten Blees ( kblees
)
Win32: soporte de salida de consola Unicode
WriteConsoleW
parece ser la única forma de imprimir unicode confiablemente en la consola (sin conversiones extrañas de páginas de códigos).También redirige
vfprintf
a la versiónwinansi.c
.
Win32: agregue funciones de conversión Unicode
Agregue funciones de conversión Unicode para convertir entre la codificación UTF-16LE nativa de Windows a UTF-8 y viceversa.
Para admitir repositorios con nombres de archivos codificados heredados, la función de conversión UTF-8 a UTF-16 intenta crear nombres de archivos válidos y únicos, incluso para secuencias de bytes UTF-8 no válidas, de modo que estos repositorios puedan verificarse sin error.
Es probable que sea un puerto de algo ya integrado en msysgit, pero al menos eso significa que la versión de Windows de Git no tendrá que divergir / parchear del código fuente de Git repo principal para incluir esas mejoras.
Encontré esta respuesta en otro lugar:
chcp.com 65001
Tema de codificación de Git bash chcp windows7
Eso es lo que realmente resolvió para mí.
Enfrenté el mismo problema en MSYS Git 2.8.0 y resultó que solo era necesario cambiar la configuración.
$ git --version
git version 2.8.0.windows.1
La configuración predeterminada de la consola de Git Bash en mi sistema no muestra los nombres de archivos griegos.
$cd ~
$ls
AppData/
''Application Data''@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
''Local Settings''@
NTUSER.DAT
.
.
.
''''$''/316/244/316/261'''' ''$''/316/255/316/263/316/263/317/201/316/261/317/206/316/254'''' ''$''/316/274/316/277/317/205''@
La última línea debe mostrar "Τα έγγραφά μου", la traducción griega de "Mis documentos". Para solucionarlo, seguí los siguientes pasos:
Verifique su configuración regional existente
$locale LANG=en LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL=
Como se muestra arriba, en mi caso no fue UTF-8
Cambie la configuración regional a una codificación UTF-8. Haga clic en el ícono en el lado izquierdo de la barra de título de MINGW, seleccione "Opciones" y en la categoría "Texto" seleccione "UTF-8" Conjunto de caracteres. También debe elegir una fuente Unicode, como la "Consola Lucida" predeterminada. Mi configuración se ve de la siguiente manera:
Cambie el idioma de la ventana actual (no es necesario hacer esto en futuras ventanas, ya que se crearán con la configuración del paso 2)
$ LANG=''C.UTF-8''
El comando ls ahora debería mostrarse correctamente
AppData/ ''Application Data''@ Contacts/ Cookies@ Desktop/ Documents/ Downloads/ Favorites/ Links/ ''Local Settings''@ NTUSER.DAT . . . ''Τα έγγραφά μου''@
Puedo ver que hay algunos problemas con la codificación de caracteres con git bash para Windows. Menos por el trabajo con git y las herramientas con las que viene (curl, cat, grep, etc.). No me encontré con problemas con estos años relacionados con la codificación de caracteres.
Normalmente, con cada nueva versión, los problemas se resuelven mejor. Por ejemplo, con la versión de hace un año, no pude ingresar caracteres como " ä
" en el caparazón, por lo que no fue posible escribir
echo "ä"
Para probar rápidamente si UTF-8 es compatible y en qué nivel. Una solución alternativa es escribir las secuencias de bytes octal:
$ echo -e "/0303/0244"
ä
Todavía tengo problemas cuando ejecuto mi binario php.exe de Windows para dar salida al texto:
$ php -r ''echo "/xC3/xA4";''
ä
Esto no da el " ä
" en el terminal, sino que emite " ä
" en su lugar. La solución alternativa que tengo para eso es que envuelvo el comando php
en un bash-script que procesa la salida a través de cat
:
#!/bin/bash
{ php.exe "$@" 2>&1 1>&3 | cat 1>&2; } 3>&1 | cat
árbitro. Reg. stdout + stderr cat
Esto mágicamente hace que php
vuelva a funcionar:
$ php -r ''echo "/xC3/xA4";''
ä
Se aplica a
$ git --version
git version 1.9.4.msysgit.1
Debo admitir que echo de menos entender más profundamente por qué esto es todo lo que es. Pero finalmente estoy contento de haber encontrado una solución para usar php en git bash con soporte UTF-8.