Probleme bei der Codierung der Git-Protokollausgabe an der Windows 10-Eingabeaufforderung

89

Problem

Wie wird die git logBefehlsausgabe an der Windows-Eingabeaufforderung richtig angezeigt?

Beispiel

Git-Befehlssequenz, die zum Problem führt Wie Sie sehen können, kann ich diakritische Zeichen richtig eingeben, aber auf git logder Ausgabe ist irgendwie entkommen. Gemäß der UTF-8Codierungstabelle entsprechen die Codes zwischen spitzen Klammern ( <und >) von der Ausgabe den zuvor eingegebenen git configParametern.

Ich habe versucht, die LESSCHARSETUmgebungsvariable utf-8in einer der Antworten für ein ähnliches Problem auf " suggeriert" zu setzen, aber dann ist die Ausgabe verstümmelt:

Git-Log-Ausgabe nach dem Setzen von LESSCHARSET = utf8

Ich weiß, dass .git/configes richtig codiert ist, utf-8da es gitkwie erwartet gehandhabt wird .

Richtige Gitk-Ausgabe

Hier ist localeggf. die Befehlsausgabe

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=

BEARBEITEN:

Die Ausgabe ist die gleiche auch in reinem Git-Bash :

Geben Sie hier die Bildbeschreibung ein

Daher glaube ich, dass das Problem Shell-unabhängig ist und sich auf Git oder dessen Konfiguration selbst bezieht.

Marcin Kłopotek
quelle
2
Haben Sie die Lösung unter " Unicode-Zeichen in der Windows-Befehlszeile - wie? " Ausprobiert?
Bis zum
Ja, ich habe mehrere Codepages einschließlich 65001 (UTF-8) ohne Ergebnis ausprobiert. Es scheint, dass der Befehl chcp keinen Einfluss darauf hat, wie die Ausgabe des Git-Protokolls angezeigt wird. Es wird immer auf die gleiche Weise angezeigt.
Marcin Kłopotek
1
Entschuldigung, wenn die Frage dumm klingt, aber warum verwenden Sie überhaupt die Windows-Eingabeaufforderung anstelle von Git Bash? Es ist besser für die Verwendung von Git geeignet, das Fenster kann bis zum Vollbild angepasst werden, die Eingabeaufforderung zeigt automatisch an, auf welchem ​​Zweig Sie sich befinden usw.
Kriegaex
Es ist nicht dumm @kriegaex, es ist eigentlich gut. Ich verwende Git-Bash, das in ConEmu für den täglichen Gebrauch verpackt ist. Das Ergebnis ist das gleiche i.imgur.com/hMKz9D3r.png . Ich habe mein Problem anhand von Beispielen mit cmd.exe beschrieben, um Personen nicht mit anderen abhängigen Tools zu verwechseln, da ich glaube, dass das Problem Shell-unabhängig ist und sich auf Git oder dessen Konfiguration selbst bezieht.
Marcin Kłopotek

Antworten:

159

Okay, ich habe ein bisschen experimentiert und herausgefunden, dass Windows Git-Befehle tatsächlich UNIX-Variablen wie benötigen LC_ALL, um Polnisch (oder andere UTF-8-Zeichen) korrekt anzuzeigen. Versuchen Sie einfach diesen Befehl:

set LC_ALL=C.UTF-8

Dann genießen Sie das Ergebnis. Folgendes ist auf meiner Konsole passiert (Schriftart "Consolas", nicht chcperforderlich):

Windows-Konsole CMD


Aktualisieren:

  • Nun, damit Windows-Befehle wie type(Anzeigedatei auf der Konsole) korrekt funktionieren, müssen Sie chcp 65001.
  • Und wenn Sie Befehle von Git Bash bevorzugen cat, profitieren Sie von den oben genannten set LC_ALL=C.UTF-8.

Windows-Konsolen-CMD, Teil 2


Update 2: So machen Sie die Änderungen dauerhaft

Erstellen Sie , wie Benutzer mono blaine sagte, eine Umgebungsvariable LC_ALLund weisen Sie ihr den Wert C.UTF-8entweder global oder nur für Ihr eigenes Benutzerprofil zu (Entschuldigung für den deutschen Screenshot):

Umgebungsvariable erstellen

Wenn Sie das nächste Mal eine Befehlsprozessorkonsole (cmd.exe) öffnen, sollte der Variablenwert bei der Ausgabe des Befehls angezeigt werden echo %LC_ALL%. In PowerShell sollte dies bei der Ausgabe angezeigt werden $env:LC_ALL.

Der einfachste Weg, die UTF-8-Codepage dauerhaft zu machen, besteht darin regeedit, einen neuen Wert mit dem Namen Autoruntype string zum Abschnitt zu öffnen und HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processorihm den Wert zuzuweisen chcp 65001.

Registrierungseditor

Von nun an wird dieser Befehl jedes Mal ausgeführt, wenn Sie eine neue cmd.exe-Konsole öffnen. Sie sehen die Ausgabe sogar im neuen Fenster: "Aktive Codepage: 65001". (oder ähnlich in Ihrer jeweiligen Sprache).

Übrigens: Um eine UTF-8-codierte Datei in PowerShell korrekt anzuzeigen, können Sie Get-Content -encoding UTF8 file.txtoder cat -encoding UTF8 file.txt( catals Alias ​​für Get-Contentin PowerShell) verwenden.

Kriegaex
quelle
Set LC_ALLwird von Git selbst nicht benötigt. Andere Tools - im Lieferumfang der Git-Installation enthalten - wie lessder Standard-Pager / siehe core.pager verwenden den LC_ALLWert. Andere gültige Werte sind die lokalisierte Sprache, zB: LC_ALL=de_DE.UTF-8für die Deutschen.
Rückkehr42
1
Sie können die Umgebungsvariable setx LC_ALL C.UTF-8
Anion
Powershell 6 in ConEmu, es war genug , um hinzuzufügen , $env.LC_ALL='ClUTF-8'zu$Profile
Andrew Spencer
67

Wenn sich jemand für das PowerShell-Äquivalent von interessiert set LC_ALL=C.UTF-8, ist dies:

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

Dies funktioniert jedoch nur für die aktuelle Sitzung. Um es dauerhaft zu machen, zwei Möglichkeiten:

  • Erstellen Sie eine Umgebungsvariable LC_ALLmit dem WertC.UTF-8
  • oder $env:LC_ALL='C.UTF-8'in Ihre $ProfileDatei einfügen
Monoblaine
quelle
1
Oder fügen Sie es Ihrem PowerShell-Profil hinzu (ich bevorzuge dies der globalen Einstellung, da ich dasselbe Profil - über Git - auf mehreren Computern verwende).
Richard
3
Die Profildatei kann bearbeitet werden, indem Sie beispielsweise Folgendes ausführen: notepad $ profile Fügen Sie dann irgendwo eine Zeile hinzu, wie von mono blaine vorgeschlagen, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad
Mit PowerShell 6 + ConEmu unter Windows 10: Dies funktioniert, es wurde nichts anderes benötigt
Andrew Spencer
6

Ich verwende Git über Powershell Core v7.0.3 mit posh-git, das im Windows Terminal unter Windows 10 installiert ist .

Ich habe Antworten durchgesehen und viele davon ausprobiert. Die Lösungen, die für mich funktionierten, waren:

Diese Lösungen arbeiten beide getrennt. Ich habe mich für den Befehl Git entschieden, da das Problem anscheinend mit Git zusammenhängt und das Powershell-Profil sauberer bleibt.

Ayşe Nur
quelle
Danke für die Git-Einstellung. Die Git-Einstellungen funktionieren für mich, haben aber auch festgestellt, dass die Einstellung $env:LESSCHARSET='utf-8'auch für PowerShell 5 im Windows-Terminal funktioniert.
Mloskot
5

Ich benutze git bashauf WIN10. Was mich betrifft, so erscheinen 4 Einstellungen wie erwartet.

  • envRahmen. In LC_ALL=C.UTF-8, LESSCHARSET=UTF-8auf PATHglobaler Ebene.

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

  • git bashRahmen. Set Options-> Text-> Character setzu utf-8. Oder setzen localeund Character setbeides auf default. Es ist klug genug, das Richtige zu wählen encoding.

Getan.

W.Perrin
quelle
Ich verwende die gitWindows-Eingabeaufforderung, und die ersten beiden Schritte haben das Problem für meinen Fall behoben.
Nglee
0

Ich musste die Windows-PowerShell-Eingabeaufforderung anstelle der Standard-Eingabeaufforderung (Windowkey + X) verwenden.

John Ktejik
quelle
0

Ich hatte ein solches Problem unter Linux. Und das Problem war, dass ich keine Gebietsschemas generiert habe. Meine Ausgabe von localewar also, alle "C" -Buchstaben ohne UTF-8 zu speichern. Um dies zu lösen, habe ich unkommentiert en_US.UTF-8und ru_RU.UTF-8in /etc/locale.gen. Dann starte ich localectl set-locale LANG = ru_RU.UTF-8 und starte neu. Und neu in das System eingeloggt. Danach wurde ciryllic normal angezeigt.

Ein Hai
quelle