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, necesitachcp 65001
. -
Y si prefiere comandos de Git Bash como
cat
se beneficiará delset LC_ALL=C.UTF-8
mencionadoset 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
. AgregueLC_ALL=C.UTF-8
,LESSCHARSET=UTF-8
aPATH
nivel mundial. -
git
config.git config --global i18n.logOutputEncoding utf-8
. -
configuración de
git bash
. EstablezcaOptions-> Text-> Character set
enutf-8
. O establezca lalocale
y elCharacter set
pordefault
. Es lo suficientemente inteligente como para elegir laencoding
correcta.
Hecho.