tag remove practices crear best git character-encoding locale command-prompt

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



git tag commit id (4)

Problema

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

Ejemplo

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-8 , los códigos entre paréntesis angulares ( < y > ) de la salida corresponden a los parámetros de git config previamente escritos.

Intenté establecer la variable de entorno LESSCHARSET en utf-8 como se sugiere en una de las respuestas para un problema similar, pero luego la salida es confusa:

Sé que .git/config está codificado correctamente con utf-8 como lo maneja gitk como se esperaba.

Aquí está la salida del comando locale 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:

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


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

set LC_ALL=C.UTF-8

Entonces disfruta el resultado. Esto es lo que sucedió en mi consola (fuente "Consolas", no se necesita chcp ):

Actualizar:

  • Bueno, para que los comandos de Windows como type (display file en la consola) funcionen correctamente, necesita chcp 65001 .
  • Y si prefiere comandos de Git Bash como cat se beneficiará del set LC_ALL=C.UTF-8 mencionado set LC_ALL=C.UTF-8 .

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

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

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 simple de hacer que la página de códigos UTF-8 sea permanente es abrir regeedit y agregar un nuevo valor llamado Autorun de tipo string a la sección HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor y asignarle el valor chcp 65001 .

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

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


Si alguien está interesado en el equivalente de PowerShell del 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, cree una variable de entorno llamada LC_ALL con el valor C.UTF-8 .


Tuve que usar el símbolo del sistema de Windows Powershell en lugar del predeterminado (Windowkey + X)


Yo uso git bash en WIN10 . En cuanto a mí, 4 configuraciones hacen que parezca mi expectativa.

  • entorno env . Agregue LC_ALL=C.UTF-8 , LESSCHARSET=UTF-8 a PATH nivel mundial.

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

  • configuración de git bash . Establezca Options-> Text-> Character set en utf-8 . O establezca la locale y el Character set por default . Es lo suficientemente inteligente como para elegir la encoding correcta.

Hecho.