Problemas de codificación de salida de registro de git en el símbolo del sistema de Windows 10

88

Problema

¿Cómo hacer que la git logsalida del comando se muestre correctamente en el símbolo del sistema de Windows?

Ejemplo

secuencia de comandos de git que conduce al problema Como puede ver, puedo escribir caracteres diacríticos correctamente, pero en git logla salida de alguna manera se escapa. De acuerdo con la UTF-8tabla de codificación, los códigos entre paréntesis angulares ( <y >) de la salida corresponden a los git configparámetros escritos previamente .

Intenté configurar LESSCHARSETla variable de entorno utf-8como se sugiere en una de las respuestas para un problema similar, pero luego el resultado es confuso:

Salida de registro de git después de configurar LESSCHARSET = utf8

Sé que .git/configestá codificado correctamente, utf-8ya que se maneja gitkcomo se esperaba.

Salida adecuada de gitk

Aquí está la localesalida del comando si es necesario

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=

EDITAR:

La salida es la misma también en git-bash puro :

ingrese la descripción de la imagen aquí

entonces creo que el problema es independiente del shell y se relaciona con Git o su propia configuración.

Marcin Kłopotek
fuente
2
¿Ha probado la solución en " Caracteres Unicode en la línea de comandos de Windows - cómo? "
jthill
Sí, probé varias páginas de códigos, incluida la 65001 (UTF-8) sin ningún resultado. Parece que el comando chcp no influye en cómo se muestra la salida del registro de git. Siempre se muestra de la misma manera.
Marcin Kłopotek
1
Lo siento si la pregunta suena estúpida, pero ¿por qué usas el símbolo del sistema de Windows en lugar de Git Bash? Es más adecuado para usar Git, la ventana se puede cambiar de tamaño a pantalla completa, el indicador le muestra automáticamente en qué rama se encuentra, etc.
kriegaex
No es estúpido @kriegaex, en realidad es bueno. Estoy usando git-bash envuelto en ConEmu para uso diario. El resultado es el mismo i.imgur.com/hMKz9D3r.png . He descrito mi problema dando ejemplos con cmd.exe para no confundir a las personas con otras herramientas dependientes que estoy usando, ya que creo que el problema es independiente del shell y se relaciona con Git o su propia configuración.
Marcin Kłopotek

Respuestas:

157

Bien, experimenté un poco y descubrí que los comandos de Windows Git realmente necesitan variables UNIX como LC_ALLpara mostrar el polaco (u otros caracteres UTF-8) correctamente. Solo prueba este comando:

set LC_ALL=C.UTF-8

Entonces disfruta del resultado. Esto es lo que sucedió en mi consola (fuente "Consolas", no es chcpnecesario):

CMD de la consola de Windows


Actualizar:

  • Bueno, para que los comandos de Windows como type(mostrar el archivo en la consola) funcionen correctamente, es necesario chcp 65001.
  • Y si prefieres los comandos de Git Bash como catte beneficias de lo mencionado anteriormente set LC_ALL=C.UTF-8.

CMD de la consola de Windows, parte 2


Actualización 2: Cómo hacer que los cambios sean permanentes

Como dijo el usuario mono blaine , cree una variable de entorno LC_ALLy asígnele el valor C.UTF-8, ya sea globalmente o solo para su propio perfil de usuario (lo siento por la captura de pantalla en alemán):

Crear variable de entorno

La próxima vez que abra una consola de procesador de comandos (cmd.exe), debería ver el valor de la variable al ejecutar el comando echo %LC_ALL%. En PowerShell, debería verlo al emitir $env:LC_ALL.

La forma más sencilla de hacer que la página de códigos UTF-8 sea permanente es abrir regeedity agregar un nuevo valor llamado Autorunde tipo cadena a la sección HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processory asignarle el valor chcp 65001.

Editor de registro

De ahora en adelante, este comando se ejecutará cada vez que abra una nueva consola cmd.exe. Incluso verá su resultado en la nueva ventana: "Página de códigos Aktive: 65001". (o similar en su idioma respectivo).

Ah, por cierto: para mostrar un archivo codificado en UTF-8 correctamente en PowerShell, puede usar Get-Content -encoding UTF8 file.txto cat -encoding UTF8 file.txt( catsiendo un alias para Get-Contenten PowerShell).

kriegaex
fuente
Git LC_ALLno necesita el conjunto. Otras herramientas, enviadas con git installaion, como less, que es el paginador predeterminado / see core.pager, están usando el LC_ALLvalor. Otros valores válidos son el idioma localizado, por ejemplo: LC_ALL=de_DE.UTF-8para los alemanes.
regreso 42
1
puede configurar la variable de entorno desde la línea de comandos usandosetx LC_ALL C.UTF-8
anion
Powershell 6 en ConEmu, era suficiente para añadir $env.LC_ALL='ClUTF-8'a$Profile
Andrew Spencer
66

Si alguien está interesado en el equivalente de PowerShell set LC_ALL=C.UTF-8, es decir:

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

Sin embargo, esto solo funciona para la sesión actual. Para hacerlo permanente, dos posibilidades:

  • crea una variable de entorno nombrada LC_ALLcon el valorC.UTF-8
  • o poner $env:LC_ALL='C.UTF-8'en su $Profilearchivo
mono blaine
fuente
1
O agréguelo a su perfil de PowerShell (prefiero esto a la configuración global porque uso el mismo perfil, a través de git, en varias máquinas).
Richard
3
El archivo de perfil se puede editar, por ejemplo, ejecutando: notepad $ profile Luego agregue una línea en algún lugar como sugirió mono blaine, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad
Con PowerShell 6 + ConEmu en Windows 10: esto funciona, no se necesitaba nada más
Andrew Spencer
5

Yo uso git bashen WIN10. En cuanto a mí, 4 configuraciones aparecen como mi expectativa.

  • envajuste. Agregar LC_ALL=C.UTF-8, LESSCHARSET=UTF-8a PATHglobalmente.

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

  • git bashajuste. Establecer Options-> Text-> Character seten utf-8. O establecer localey Character setambos en default. Es lo suficientemente inteligente como para elegir el correcto encoding.

Hecho.

W.Perrin
fuente
Lo uso giten el símbolo del sistema de Windows y los dos primeros pasos resolvieron el problema de mi caso.
nglee
5

Estoy usando Git a través de Powershell Core v7.0.3 con posh-git instalado dentro de Windows Terminal en Windows 10.

He estado buscando respuestas y probé muchas de ellas. Las soluciones que funcionaron para mí fueron:

Ambas soluciones funcionan por separado. Elegí usar el comando Git ya que el problema parece estar relacionado con Git, y el perfil de Powershell se mantiene más limpio.

Ayşe Nur
fuente
Gracias por la configuración de Git. La configuración de Git funciona para mí, pero también descubrí que la configuración también $env:LESSCHARSET='utf-8'funciona bien para PowerShell 5 en la Terminal de Windows.
mloskot
0

Tuve que usar el símbolo del sistema de Windows powershell en lugar del predeterminado (tecla de ventana + X)

john ktejik
fuente
0

Tuve ese problema en Linux. Y el problema fue que no generé locales. Así que mi salida localefue cantando todas las letras "C", sin UTF-8. Para solucionar esto, descomenté en_US.UTF-8y ru_RU.UTF-8en /etc/locale.gen. Luego ejecuto localectl set-locale LANG = ru_RU.UTF-8 y reinicié. Y volvió a iniciar sesión en el sistema. Después de eso ciryllic se mostró normalmente.

Un tiburón
fuente