Problemas de codificação de saída de log do git no prompt de comando do Windows 10

88

Problema

Como fazer com que a git logsaída do comando seja exibida corretamente no prompt de comando do Windows?

Exemplo

sequência de comandos git que leva ao problema Como você pode ver, posso digitar caracteres diacríticos corretamente, mas na git logsaída há algum escape. De acordo com a UTF-8tabela de codificação, os códigos entre colchetes angulares ( <e >) da saída correspondem aos git configparâmetros digitados anteriormente .

Tentei definir LESSCHARSETa variável de ambiente utf-8como sugerida em uma das respostas para um problema semelhante, mas a saída está distorcida:

saída de log git após definir LESSCHARSET = utf8

Eu sei que .git/configestá codificado corretamente utf-8, pois é tratado gitkcomo esperado.

Saída adequada do gitk

Aqui está a localesaí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 :

insira a descrição da imagem aqui

portanto, acredito que o problema seja independente do shell e esteja relacionado ao Git ou à sua própria configuração.

Marcin Kłopotek
fonte
2
Você já tentou a solução em " Caracteres Unicode na linha de comando do Windows - como? "?
jthill
Sim, tentei várias páginas de código, incluindo 65001 (UTF-8), sem nenhum resultado. Parece que o comando chcp não tem influência em como a saída do log do git é exibida. É sempre exibido da mesma maneira.
Marcin Kłopotek
1
Desculpe se a pergunta parece estúpida, mas por que você usa o prompt de comando do Windows em vez do Git Bash? É mais adequado para usar Git, a janela pode ser redimensionada para tela inteira, o prompt mostra automaticamente em qual branch você está, etc.
kriegaex 01 de
Não é estúpido @kriegaex, na verdade é bom. Estou usando o git-bash embrulhado no ConEmu para o uso diário. O resultado é o mesmo i.imgur.com/hMKz9D3r.png . Descrevi meu problema dando exemplos com cmd.exe para não confundir as pessoas com outras ferramentas dependentes que estou usando, pois acredito que o problema é independente do shell e está relacionado ao Git ou sua própria configuração.
Marcin Kłopotek

Respostas:

157

Ok, eu experimentei um pouco e descobri que os comandos do Windows Git realmente precisam de variáveis ​​UNIX, como LC_ALLpara exibir polonês (ou outros caracteres UTF-8) corretamente. Apenas tente este comando:

set LC_ALL=C.UTF-8

Então aproveite o resultado. Aqui está o que aconteceu no meu console (fonte "Consolas", não é chcpnecessário):

CMD do console do Windows


Atualizar:

  • Bem, para que comandos do Windows como type(exibir arquivo no console) funcionem corretamente, você precisa chcp 65001.
  • E se você preferir comandos do Git Bash, cataproveite o acima mencionado set LC_ALL=C.UTF-8.

CMD do console do Windows, parte 2


Atualização 2: como tornar as alterações permanentes

Como o usuário mono blaine disse, crie uma variável de ambiente LC_ALLe atribua a ela o valor C.UTF-8, seja globalmente ou apenas para o seu próprio perfil de usuário (desculpe a captura de tela em alemão):

Criar variável de ambiente

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 regeedite adicionar um novo valor denominado Autorunde tipo string à seção HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processore atribuir o valor a ele chcp 65001.

Editor de registro

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.txtou cat -encoding UTF8 file.txt( catsendo um alias para Get-Contentno PowerShell).

Kriegaex
fonte
Set LC_ALLnão é necessário para o próprio git. Outras ferramentas - fornecidas com a instalação do git - como less, que é o pager padrão / see core.pager, estão usando o LC_ALLvalor. Outros valores válidos são o idioma localizado, por exemplo: LC_ALL=de_DE.UTF-8para os alemães.
retorno 42 de
1
você pode definir a variável de ambiente da linha de comando usandosetx LC_ALL C.UTF-8
anion
Powershell 6 em ConEmu, foi o suficiente para adicionar $env.LC_ALL='ClUTF-8'a$Profile
Andrew Spencer
66

Se alguém estiver interessado no equivalente do PowerShell set LC_ALL=C.UTF-8, isto é:

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

No entanto, isso funciona apenas para a sessão atual. Para torná-lo permanente, duas possibilidades:

  • crie uma variável de ambiente nomeada LC_ALLcom o valorC.UTF-8
  • ou coloque $env:LC_ALL='C.UTF-8'em seu $Profilearquivo
mono blaine
fonte
1
Ou adicione-o ao seu perfil do PowerShell (eu prefiro isso à configuração global porque eu uso o mesmo perfil - via git - em várias máquinas).
Richard
3
O arquivo de perfil pode ser editado, por exemplo, executando: notepad $ profile Depois, adicione uma linha em algum lugar como mono blaine sugerido, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad
Com PowerShell 6 + ConEmu no Windows 10: isso funciona, nada mais era necessário
Andrew Spencer
5

Eu uso git bashem WIN10. Quanto a mim, 4 configurações aparecem conforme minha expectativa.

  • envconfiguração. Adicione LC_ALL=C.UTF-8, LESSCHARSET=UTF-8para PATHglobalmente.

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

  • git bashconfiguração. Defina Options-> Text-> Character setcomo utf-8. Ou definir localee Character setambos para default. É inteligente o suficiente para escolher o correto encoding.

Feito.

W.Perrin
fonte
Eu uso gitno prompt de comando do Windows e as duas primeiras etapas resolveram o problema para o meu caso.
nglee
5

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:

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.

Ayşe Nur
fonte
Obrigado pela configuração do Git. As configurações do Git funcionam para mim, mas também descobri que essa configuração também $env:LESSCHARSET='utf-8'funciona bem para o PowerShell 5 no Terminal do Windows.
mloskot
0

Tive que usar o prompt de comando do Windows PowerShell em vez do padrão (Windowkey + X)

john ktejik
fonte
0

Eu tive esse problema no Linux. E o problema é que eu não gerei locales. Portanto, minha saída de localeestava cantando todas as letras "C", sem UTF-8. Para resolver isso, descomentei en_US.UTF-8e ru_RU.UTF-8em /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.

Um tubarão
fonte