Problema
Como fazer com que a git log
saída do comando seja exibida corretamente no prompt de comando do Windows?
Exemplo
Como você pode ver, posso digitar caracteres diacríticos corretamente, mas na git log
saída há algum escape. De acordo com a UTF-8
tabela de codificação, os códigos entre colchetes angulares ( <
e >
) da saída correspondem aos git config
parâmetros digitados anteriormente .
Tentei definir LESSCHARSET
a variável de ambiente utf-8
como sugerida em uma das respostas para um problema semelhante, mas a saída está distorcida:
Eu sei que .git/config
está codificado corretamente utf-8
, pois é tratado gitk
como esperado.
Aqui está a locale
saída do comando, se necessário
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:
A saída é a mesma também no git-bash puro :
portanto, acredito que o problema seja independente do shell e esteja relacionado ao Git ou à sua própria configuração.
fonte
Respostas:
Ok, eu experimentei um pouco e descobri que os comandos do Windows Git realmente precisam de variáveis UNIX, como
LC_ALL
para exibir polonês (ou outros caracteres UTF-8) corretamente. Apenas tente este comando:Então aproveite o resultado. Aqui está o que aconteceu no meu console (fonte "Consolas", não é
chcp
necessário):Atualizar:
type
(exibir arquivo no console) funcionem corretamente, você precisachcp 65001
.cat
aproveite o acima mencionadoset LC_ALL=C.UTF-8
.Atualização 2: como tornar as alterações permanentes
Como o usuário mono blaine disse, crie uma variável de ambiente
LC_ALL
e atribua a ela o valorC.UTF-8
, seja globalmente ou apenas para o seu próprio perfil de usuário (desculpe a captura de tela em alemão):Na próxima vez que você abrir um console do processador de comando (cmd.exe), deverá ver o valor da variável ao emitir o comando
echo %LC_ALL%
. No PowerShell, você deve vê-lo ao emitir$env:LC_ALL
.A maneira mais simples de tornar a página de código UTF-8 permanente é abrir
regeedit
e adicionar um novo valor denominadoAutorun
de tipo string à seçãoHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
e atribuir o valor a elechcp 65001
.Doravante, este comando será executado cada vez que você abrir um novo console cmd.exe. Você até mesmo vê sua saída na nova janela: "Aktive Codepage: 65001." (ou semelhante em seu respectivo idioma).
Ah, a propósito: para exibir um arquivo codificado UTF-8 corretamente no PowerShell, você pode usar
Get-Content -encoding UTF8 file.txt
oucat -encoding UTF8 file.txt
(cat
sendo um alias paraGet-Content
no PowerShell).fonte
LC_ALL
não é necessário para o próprio git. Outras ferramentas - fornecidas com a instalação do git - comoless
, que é o pager padrão / see core.pager, estão usando oLC_ALL
valor. Outros valores válidos são o idioma localizado, por exemplo:LC_ALL=de_DE.UTF-8
para os alemães.setx LC_ALL C.UTF-8
$env.LC_ALL='ClUTF-8'
a$Profile
Se alguém estiver interessado no equivalente do PowerShell
set LC_ALL=C.UTF-8
, isto é:No entanto, isso funciona apenas para a sessão atual. Para torná-lo permanente, duas possibilidades:
LC_ALL
com o valorC.UTF-8
$env:LC_ALL='C.UTF-8'
em seu$Profile
arquivofonte
Eu uso
git bash
emWIN10
. Quanto a mim, 4 configurações aparecem conforme minha expectativa.env
configuração. AdicioneLC_ALL=C.UTF-8
,LESSCHARSET=UTF-8
paraPATH
globalmente.git
config.git config --global i18n.logOutputEncoding utf-8
.git bash
configuração. DefinaOptions-> Text-> Character set
comoutf-8
. Ou definirlocale
eCharacter set
ambos paradefault
. É inteligente o suficiente para escolher o corretoencoding
.Feito.
fonte
git
no prompt de comando do Windows e as duas primeiras etapas resolveram o problema para o meu caso.Estou usando o Git via Powershell Core v7.0.3 com posh-git instalado dentro do Terminal do Windows no Windows 10.
Tenho navegado pelas respostas e experimentei muitas delas. As soluções que funcionaram para mim foram:
$env:LC_ALL = 'C.UTF-8'
ao perfil Powershell atualgit config --global core.pager 'less --raw-control-chars'
Essas soluções funcionam separadamente. Escolhi usar o comando Git porque o problema parece estar relacionado ao Git, e o perfil do Powershell continua mais limpo.
fonte
$env:LESSCHARSET='utf-8'
funciona bem para o PowerShell 5 no Terminal do Windows.Tive que usar o prompt de comando do Windows PowerShell em vez do padrão (Windowkey + X)
fonte
Eu tive esse problema no Linux. E o problema é que eu não gerei locales. Portanto, minha saída de
locale
estava cantando todas as letras "C", sem UTF-8. Para resolver isso, descomenteien_US.UTF-8
eru_RU.UTF-8
em /etc/locale.gen. Então eu executo localectl set-locale LANG = ru_RU.UTF-8 e reiniciado. E relogado para o sistema. Depois disso, o cirílico foi exibido normalmente.fonte