problemi di codifica dell'output del registro git sul prompt dei comandi di Windows 10


89

Problema

Come git logvisualizzare correttamente l'output dei comandi sul prompt dei comandi di Windows?

Esempio

sequenza di comandi git che porta al problema Come puoi vedere posso digitare correttamente i segni diacritici ma git logsull'output è in qualche modo sfuggito. Secondo la UTF-8tabella di codifica i codici tra parentesi angolate ( <e >) dall'output corrispondono ai git configparametri precedentemente digitati .

Ho provato a impostare LESSCHARSETla variabile di ambiente su utf-8come suggerito in una delle risposte per un problema simile, ma poi l'output è confuso:

git log output dopo aver impostato LESSCHARSET = utf8

So che .git/configè codificato correttamente con utf-8come viene gestito gitkcome previsto.

Output gitk corretto

Ecco l' localeoutput del comando, se necessario

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=

MODIFICARE:

L'output è lo stesso anche in puro git-bash :

inserisci qui la descrizione dell'immagine

quindi credo che il problema sia indipendente dalla shell e riguardi Git o la sua configurazione stessa.



Sì, ho provato diverse tabelle di codici tra cui 65001 (UTF-8) senza alcun risultato. Sembra che il comando chcp non abbia alcuna influenza su come viene visualizzato l'output del log git. Viene sempre visualizzato allo stesso modo.
Marcin Kłopotek

1
Scusa se la domanda sembra stupida, ma perché usi il prompt dei comandi di Windows invece di Git Bash? È più adatto all'uso di Git, la finestra è ridimensionabile fino a schermo intero, il prompt mostra automaticamente in quale ramo ti trovi ecc.
kriegaex

Non è stupido @kriegaex, in realtà è buono. Sto usando git-bash avvolto in ConEmu per l'uso quotidiano. Il risultato è lo stesso i.imgur.com/hMKz9D3r.png . Ho descritto il mio problema fornendo esempi con cmd.exe per non confondere le persone con altri strumenti dipendenti che sto utilizzando poiché credo che il problema sia indipendente dalla shell e si riferisca a Git o alla sua configurazione stessa.
Marcin Kłopotek

Risposte:


159

Ok, ho sperimentato un po 'e ho scoperto che i comandi Git di Windows hanno effettivamente bisogno di variabili UNIX come LC_ALLper visualizzare correttamente il polacco (o altri caratteri UTF-8). Prova questo comando:

set LC_ALL=C.UTF-8

Allora goditi il ​​risultato. Ecco cosa è successo sulla mia console (font "Consolas", non chcpnecessario):

CMD della console di Windows


Aggiornare:

  • Bene, affinché i comandi di Windows come type(visualizza file su console) funzionino correttamente, è necessario chcp 65001.
  • E se preferisci i comandi di Git Bash come catte, approfitta di quanto sopra set LC_ALL=C.UTF-8.

CMD della console Windows, parte 2


Aggiornamento 2: come rendere permanenti le modifiche

Come ha detto l' utente mono blaine , crea una variabile d'ambiente LC_ALLe assegnale il valore C.UTF-8, a livello globale o solo per il tuo profilo utente (scusa per lo screenshot tedesco):

Crea variabile d'ambiente

La prossima volta che aprirai una console del processore dei comandi (cmd.exe) dovresti vedere il valore della variabile quando esegui il comando echo %LC_ALL%. In PowerShell dovresti vederlo durante l'emissione $env:LC_ALL.

Il modo più semplice per rendere permanente la tabella codici UTF-8 è aprire regeedite aggiungere un nuovo valore denominato Autorundi tipo stringa alla sezione HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processore assegnargli il valore chcp 65001.

Editor di registrazione

D'ora in poi, questo comando verrà eseguito ogni volta che si apre una nuova console cmd.exe. Puoi anche vedere il suo output nella nuova finestra: "Aktive Codepage: 65001." (o simile nella tua rispettiva lingua).

Oh, a proposito: per visualizzare correttamente un file codificato UTF-8 in PowerShell è possibile utilizzare Get-Content -encoding UTF8 file.txto cat -encoding UTF8 file.txt( catessendo un alias per Get-Contentin PowerShell).


Set LC_ALLnon è necessario a git stesso. Altri strumenti, forniti con l'installazione git less, come , che è il pager predefinito / vedi core.pager, stanno usando il LC_ALLvalore. Altri valori validi sono la lingua localizzata ad esempio: LC_ALL=de_DE.UTF-8per i tedeschi.
ritorno42

1
puoi impostare la variabile d'ambiente dalla riga di comando usandosetx LC_ALL C.UTF-8
anion

Powershell 6 in ConEmu, è stato sufficiente aggiungere $env.LC_ALL='ClUTF-8'a$Profile
Andrew Spencer

67

Se qualcuno è interessato all'equivalente di PowerShell set LC_ALL=C.UTF-8, ovvero:

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

Tuttavia questo funziona solo per la sessione corrente. Per renderlo permanente, due possibilità:

  • creare una variabile di ambiente denominata LC_ALL con il valoreC.UTF-8
  • o inserisci il $env:LC_ALL='C.UTF-8'tuo $Profilefile

1
Oppure aggiungilo al tuo profilo PowerShell (lo preferisco all'impostazione globale perché utilizzo lo stesso profilo - tramite git - su più macchine).
Richard

3
Il file del profilo può essere modificato, ad esempio, eseguendo: notepad $ profilo Quindi aggiungi una riga da qualche parte come suggerito da mono blaine, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad

Con PowerShell 6 + ConEmu su Windows 10: funziona, non era necessario nient'altro
Andrew Spencer

6

Sto usando Git tramite Powershell Core v7.0.3 con posh-git installato all'interno di Windows Terminal su Windows 10.

Ho passato in rassegna le risposte e ne ho provate molte. Le soluzioni che hanno funzionato per me sono state:

Entrambe queste soluzioni funzionano separatamente. Ho scelto di utilizzare il comando Git poiché il problema sembra essere correlato a Git e il profilo di Powershell rimane più pulito.


Grazie per l'impostazione Git. Le impostazioni di Git funzionano per me, ma ho anche scoperto che l'impostazione $env:LESSCHARSET='utf-8'funziona bene anche per PowerShell 5 nel terminale di Windows.
mloskot

5

Io uso git bashsu WIN10. Per quanto mi riguarda, 4 impostazioni fanno sembrare la mia aspettativa.

  • envambientazione. Aggiungere LC_ALL=C.UTF-8, LESSCHARSET=UTF-8a PATHlivello globale.

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

  • git bashambientazione. Imposta Options-> Text-> Character setsu utf-8. O impostare localeed Character setentrambi su default. È abbastanza intelligente da scegliere il corretto encoding.

Fatto.


Uso gitsul prompt dei comandi di Windows e i primi due passaggi hanno risolto il problema per il mio caso.
nglee

0

Ho dovuto usare il prompt dei comandi di Windows PowerShell invece di quello predefinito (Windowkey + X)


0

Ho avuto un tale problema su Linux. E il problema era che non ho generato le impostazioni locali. Quindi il mio output di localeera contenere tutte le lettere "C", senza UTF-8. Per risolvere questo problema, ho decommentato en_US.UTF-8e ru_RU.UTF-8in /etc/locale.gen. Quindi eseguo localectl set-locale LANG = ru_RU.UTF-8 e riavvio. E reinserito nel sistema. Dopo quel cirillico è stato visualizzato normalmente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.