Problemas de codificación de salida de ‘git log’ en el terminal CLI de Windows 10

7 minutos de lectura

Avatar de usuario de Marcin Kłopotek
Marcin Kłopotek

Problema

como puedo hacer git log ¿La salida del comando se muestra correctamente en el terminal CLI de Windows?

Ejemplo

Secuencia de comandos de Git que conduce al problema

Como puede ver, puedo escribir caracteres diacríticos correctamente, pero en git log, la salida se escapa de alguna manera. De acuerdo con la Tabla de codificación UTF-8los códigos entre paréntesis angulares (< y >) de la salida corresponden a los tecleados previamente git config parámetros

he intentado configurar LESSCHARSET variable de entorno a utf-8 como se sugiere en una de las respuestas para un problema similar, pero luego el resultado es confuso:

salida 'git log' después de establecer LESSCHARSET=utf8

.git/config está codificado correctamente con UTF-8 como lo maneja gitk como se esperaba.

Salida adecuada de gitk

Aquí está el locale salida de 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=

La salida es la misma también en puro Git Bash:

Ingrese la descripción de la imagen aquí

así que creo que el problema es independiente de Shell y se relaciona con Git o su propia configuración.

  • ¿Ha probado la solución en “Caracteres Unicode en la línea de comandos de Windows – cómo?”?

    – jthill

    31 de diciembre de 2016 a las 0:01

  • Sí, probé varias páginas de códigos, incluida 65001 (UTF-8), sin ningún resultado. Parece que el comando chcp no tiene influencia en cómo se muestra la salida del registro de git. Siempre se muestra de la misma manera.

    – Marcin Kłopotek

    31 de diciembre de 2016 a las 13:54

  • 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 hasta la pantalla completa, el indicador muestra automáticamente en qué rama se encuentra, etc.

    – kriegaex

    1 de enero de 2017 a las 14:09

  • No es estúpido @kriegaex, en realidad es bueno. Estoy usando git-bash envuelto en ConEmu para el uso diario. El resultado es el mismo i.imgur.com/hMKz9D3r.png. Describí 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 configuración en sí.

    – Marcin Kłopotek

    1 de enero de 2017 a las 14:24

  • @jthill gracias, esta respuesta parece hacerlo, stackoverflow.com/a/55674760/4592648

    – Lunes Fatiga

    5 de enero de 2022 a las 10:48

avatar de usuario de kriegaex
kriegaex

De acuerdo, experimenté un poco y descubrí que los comandos de Windows Git en realidad necesitan variables de UNIX como LC_ALL para mostrar correctamente el polaco (u otros caracteres UTF-8). 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 chcp necesario):

Consola de Windows CMD


Actualizar:

  • Bueno, para comandos de Windows como type (archivo de visualización en la consola) para que funcione correctamente, necesita chcp 65001.
  • Y si prefiere comandos de Git Bash como cat te beneficias de lo mencionado set LC_ALL=C.UTF-8.

Consola de Windows CMD, parte 2


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

como usuario mono blaine dicho, crea una variable de entorno LC_ALL y asignarle el valor C.UTF-8ya sea globalmente o solo para su propio perfil de usuario (perdón 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 emitir 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 regeedit y agregue un nuevo valor llamado Autorun de tipo cadena a sección
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor y 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 salida en la nueva ventana: “Página de códigos Aktive: 65001”. (o similar en su respectivo idioma).

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

  • Colocar LC_ALL git no lo necesita. Otras herramientas, enviadas con la instalación de git, como lessque es el buscapersonas predeterminado / ver core.pager están usando el LC_ALL valor. Otros valores válidos son el lang localizado, por ejemplo: LC_ALL=de_DE.UTF-8 para los alemanes.

    – volver42

    4 de noviembre de 2017 a las 13:41


  • puede configurar la variable de entorno desde la línea de comandos usando setx LC_ALL C.UTF-8

    – anión

    14 de abril de 2019 a las 17:49


  • Powershell 6 en ConEmu, fue suficiente para agregar $env.LC_ALL='ClUTF-8' a $Profile

    – Andrés Spencer

    19 de febrero de 2020 a las 9:51

  • Tuve un problema de codificación con la utilidad rscript (herramienta de línea de comando para ejecutar código r), este consejo también ayudó a solucionarlo. ¡Gracias!

    – Rebanada De Atún

    28 de septiembre de 2021 a las 2:21

avatar de usuario de mono blaine
mono blaine

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

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

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

  • crear una variable de entorno llamada LC_ALL con el valor C.UTF-8
  • o poner $env:LC_ALL='C.UTF-8' en tus $Profile archivo

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

    – Ricardo

    21 de noviembre de 2017 a las 11:29

  • 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

    25 de septiembre de 2018 a las 8:58

  • Con PowerShell 6 + ConEmu en Windows 10: esto funciona, no hacía falta nada más

    – Andrés Spencer

    19 de febrero de 2020 a las 9:55

Avatar de usuario de Ayşe Nur
Ayşe Nur

estoy usando Git a través de PowerShell Núcleo v7.0.3 adentro Terminal de Windows en Windows 10.

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

  • Cambiar una configuración de Git: git config --global core.pager 'less --raw-control-chars'
  • Agregar $env:LC_ALL = 'C.UTF-8' al perfil actual de PowerShell

Estas soluciones funcionan por separado. Elegí usar el comando Git porque el problema parece estar relacionado con Git y el perfil de PowerShell se mantiene limpio.

  • Gracias por la configuración de Git. La configuración de Git funciona para mí, pero también encontré esa configuración $env:LESSCHARSET='utf-8' funciona bien también para PowerShell 5 en la Terminal de Windows.

    – mloskot

    28 de septiembre de 2020 a las 9:40

Avatar de usuario de W.Perrin
W.Perrin

yo suelo Git Bash en Windows 10. En cuanto a mí, cuatro configuraciones hacen que aparezca como mi expectativa.

  • env configuración. Agregar LC_ALL=C.UTF-8,LESSCHARSET=UTF-8 a PATH globalmente.

  • git configuración git config --global i18n.logOutputEncoding utf-8.

  • Configuración de Git Bash. Colocar OpcionesTextoConjunto de caracteres a utf-8. o establecer locale y Character set ambos a default. Es lo suficientemente inteligente como para elegir el correcto encoding.

Hecho.

avatar de usuario de john k
Juan k

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

  • Funciona de maravilla para el coreano.

    – Park JongBum

    8 de noviembre de 2022 a las 4:00

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Tuve tal problema en Linux. Y el problema era que no generaba locales. Así que mi salida de locale contenía todas las letras “C”, sin UTF-8.

Para resolver esto, descomenté en_US.UTF-8 y ru_RU.UTF-8 en /etc/locale.gen. Luego ejecuto localectl set-locale LANG=ru_RU.UTF-8 y reinicio. Y volvió a iniciar sesión en el sistema. Después de eso, el cirílico se mostró normalmente.

  • Funciona de maravilla para el coreano.

    – Park JongBum

    8 de noviembre de 2022 a las 4:00

Avatar de usuario de DEV Tiago França
DEV Tiago Francia

git config --global core.pager 'less --raw-control-chars'
 
#Or

git config --global core.pager 'more'

¿Ha sido útil esta solución?