Probleme mit der Ausgabekodierung von „git log“ im Windows 10-CLI-Terminal
Lesezeit: 6 Minuten
Marcin Kłopotek
Problem
Wie kann ich machen git log Wird die Befehlsausgabe im Windows-CLI-Terminal ordnungsgemäß angezeigt?
Beispiel
Wie Sie sehen, kann ich diakritische Zeichen richtig eingeben, aber nicht git log, die Ausgabe wird irgendwie maskiert. Entsprechend der UTF-8-Codierungstabelledie Codes in spitzen Klammern (< Und >) aus der Ausgabe entsprechen den zuvor eingegebenen git config Parameter.
Ich habe versucht einzustellen LESSCHARSET Umgebungsvariable zu utf-8 wie in einer der Antworten zu einem ähnlichen Problem vorgeschlagen, aber dann ist die Ausgabe verstümmelt:
Ich weiss .git/config wird ordnungsgemäß mit UTF-8 codiert, da es von verarbeitet wird gitk wie erwartet.
Daher glaube ich, dass das Problem Shell-unabhängig ist und mit Git oder seiner Konfiguration selbst zusammenhängt.
Haben Sie die Lösung unter „Unicode-Zeichen in der Windows-Befehlszeile – wie?“ ausprobiert?
– jthill
31. Dezember 2016 um 0:01
Ja, ich habe mehrere Codepages ausprobiert, darunter 65001 (UTF-8), ohne Ergebnis. 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
31. Dezember 2016 um 13:54 Uhr
Tut mir leid, wenn die Frage dumm klingt, aber warum verwenden Sie überhaupt die Windows-Eingabeaufforderung anstelle von Git Bash? Es eignet sich besser für die Verwendung von Git, die Größe des Fensters kann bis zum Vollbild geändert werden, die Eingabeaufforderung zeigt Ihnen automatisch an, in welchem Zweig Sie sich befinden usw.
– kriegaex
1. Januar 2017 um 14:09
Es ist nicht dumm @kriegaex, es ist eigentlich gut. Für den täglichen Gebrauch verwende ich in ConEmu verpacktes Git-Bash. Das Ergebnis ist das gleiche i.imgur.com/hMKz9D3r.png. Ich habe mein Problem beschrieben und Beispiele mit cmd.exe gegeben, um die Leute nicht mit anderen abhängigen Tools zu verwechseln, die ich verwende, da ich glaube, dass das Problem Shell-unabhängig ist und mit Git oder seiner Konfiguration selbst zusammenhängt.
– Marcin Kłopotek
1. Januar 2017 um 14:24
@jthill danke, diese Antwort scheint es zu tun, stackoverflow.com/a/55674760/4592648
– Montagsmüdigkeit
5. Januar 2022 um 10:48
kriegaex
Okay, ich habe ein bisschen experimentiert und herausgefunden, dass Windows-Git-Befehle tatsächlich UNIX-Variablen wie z. B. benötigen LC_ALL um Polnisch (oder andere UTF-8-Zeichen) korrekt anzuzeigen. Probieren Sie einfach diesen Befehl aus:
set LC_ALL=C.UTF-8
Dann genießen Sie das Ergebnis. Folgendes ist auf meiner Konsole passiert (Schriftart „Consolas“, Nr chcp notwendig):
Aktualisieren:
Nun, damit Windows-Befehle wie type (Datei auf der Konsole anzeigen), um ordnungsgemäß zu funktionieren, benötigen Sie chcp 65001.
Und wenn Sie Befehle von Git Bash bevorzugen cat Sie profitieren davon set LC_ALL=C.UTF-8.
Update 2: So machen Sie die Änderungen dauerhaft
Als Benutzer Mono Blaine sagte, erstellen Sie eine Umgebungsvariable LC_ALL und weisen Sie ihm den Wert zu C.UTF-8entweder global oder nur für Ihr eigenes Benutzerprofil (Entschuldigung für den deutschen Screenshot):
Wenn Sie das nächste Mal eine Befehlsprozessorkonsole (cmd.exe) öffnen, sollten Sie beim Ausgeben des Befehls den Variablenwert sehen echo %LC_ALL%. In PowerShell sollte es bei der Ausgabe angezeigt werden $env:LC_ALL.
Der einfachste Weg, die UTF-8-Codepage dauerhaft zu machen, besteht darin, sie zu öffnen regeedit und fügen Sie einen neuen Wert mit dem Namen hinzu Autorun vom Typ Zeichenfolge zum Abschnitt HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor und weisen Sie ihm den Wert zu chcp 65001.
Von nun an wird dieser Befehl jedes Mal ausgeführt, wenn Sie eine neue cmd.exe-Konsole öffnen. Sie sehen sogar die Ausgabe im neuen Fenster: „Aktive Codepage: 65001.“ (oder ähnlich in Ihrer jeweiligen Sprache).
Übrigens: Um eine UTF-8-kodierte Datei korrekt in PowerShell anzuzeigen, können Sie Folgendes verwenden: Get-Content -encoding UTF8 file.txt oder cat -encoding UTF8 file.txt (cat ein Alias sein für Get-Content in PowerShell).
Satz LC_ALL wird von Git selbst nicht benötigt. Andere Tools – die mit der Git-Installation geliefert werden – mögen lessdas ist der Standard-Pager / see core.pager nutzen die LC_ALL Wert. Andere gültige Werte sind die lokalisierte Sprache, z. B.: LC_ALL=de_DE.UTF-8 für die Deutschen.
– zurück42
4. November 2017 um 13:41 Uhr
Sie können die Umgebungsvariable über die Befehlszeile festlegen setx LC_ALL C.UTF-8
– Anion
14. April 2019 um 17:49 Uhr
Powershell 6 in ConEmu reichte zum Hinzufügen $env.LC_ALL='ClUTF-8' Zu $Profile
– Andrew Spencer
19. Februar 2020 um 9:51 Uhr
Hatte ein Codierungsproblem mit dem Rscript-Dienstprogramm (Befehlszeilentool zum Ausführen von R-Code), dieser Rat half ebenfalls, es zu beheben. Danke!
– SliceOfTuna
28. September 2021 um 2:21
Mono Blaine
Wenn sich jemand für das PowerShell-Äquivalent von interessiert set LC_ALL=C.UTF-8das ist:
$env:LC_ALL='C.UTF-8'
Dies funktioniert jedoch nur für die aktuelle Sitzung. Um es dauerhaft zu machen, gibt es zwei Möglichkeiten:
Erstellen Sie eine Umgebungsvariable mit dem Namen LC_ALL mit dem Wert C.UTF-8
oder setzen $env:LC_ALL='C.UTF-8' in deinem $Profile Datei
Oder fügen Sie es Ihrem PowerShell-Profil hinzu (ich bevorzuge dies gegenüber der globalen Einstellung, da ich dasselbe Profil – über Git – auf mehreren Computern verwende).
– Richard
21. November 2017 um 11:29 Uhr
Die Profildatei kann bearbeitet werden, indem Sie beispielsweise Folgendes ausführen: notepad $profile. Fügen Sie dann irgendwo eine Zeile hinzu, wie Mono Blaine vorgeschlagen hat: $env:LC_ALL=’C.UTF-8′
– Tore Aurstad
25. September 2018 um 8:58
Mit PowerShell 6 + ConEmu unter Windows 10: Das funktioniert, es war nichts anderes nötig
– Andrew Spencer
19. Februar 2020 um 9:55 Uhr
Ayşe Nur
ich benutze Git über PowerShell Core v7.0.3 innen Windows-Terminal unter Windows 10.
Ich habe die Antworten durchgesehen und viele davon ausprobiert. Die Lösungen, die für mich funktionierten, waren:
Ändern Sie eine Git-Einstellung: git config --global core.pager 'less --raw-control-chars'
Hinzufügen $env:LC_ALL = 'C.UTF-8' zum aktuellen PowerShell-Profil
Diese Lösungen funktionieren beide separat. Ich habe mich für die Verwendung des Git-Befehls entschieden, da das Problem anscheinend mit Git zusammenhängt und das PowerShell-Profil sauberer bleibt.
Danke für die Git-Einstellung. Die Git-Einstellungen funktionieren bei mir, habe diese Einstellung aber auch gefunden $env:LESSCHARSET='utf-8' Funktioniert auch gut für PowerShell 5 im Windows-Terminal.
– mloskot
28. September 2020 um 9:40 Uhr
W. Perrin
ich benutze Git Bash unter Windows 10. Was mich betrifft, entsprechen vier Einstellungen meinen Erwartungen.
env Einstellung. Hinzufügen LC_ALL=C.UTF-8,LESSCHARSET=UTF-8 Zu PATH global.
Git Bash-Einstellung. Satz Optionen → Text → Zeichensatz Zu utf-8. Oder einstellen locale Und Character set beide zu default. Es ist klug genug, das Richtige zu wählen encoding.
Erledigt.
John K
Ich musste die Windows PowerShell-Eingabeaufforderung anstelle der Standardeingabeaufforderung verwenden (Windows-Taste + X).
Es funktioniert wie ein Zauber für Koreaner.
– Park JongBum
8. November 2022 um 16:00 Uhr
Peter Mortensen
Ich hatte ein solches Problem unter Linux. Und das Problem war, dass ich keine Gebietsschemas generiert habe. Also meine Ausgabe von locale enthielt alle „C“-Buchstaben, ohne UTF-8.
Um dies zu lösen, habe ich den Kommentar entfernt en_US.UTF-8 Und ru_RU.UTF-8 in /etc/locale.gen. Dann führe ich localectl set-locale LANG=ru_RU.UTF-8 aus und starte neu. Und erneut beim System angemeldet. Danach wurde Kyrillisch normal angezeigt.
Haben Sie die Lösung unter „Unicode-Zeichen in der Windows-Befehlszeile – wie?“ ausprobiert?
– jthill
31. Dezember 2016 um 0:01
Ja, ich habe mehrere Codepages ausprobiert, darunter 65001 (UTF-8), ohne Ergebnis. 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
31. Dezember 2016 um 13:54 Uhr
Tut mir leid, wenn die Frage dumm klingt, aber warum verwenden Sie überhaupt die Windows-Eingabeaufforderung anstelle von Git Bash? Es eignet sich besser für die Verwendung von Git, die Größe des Fensters kann bis zum Vollbild geändert werden, die Eingabeaufforderung zeigt Ihnen automatisch an, in welchem Zweig Sie sich befinden usw.
– kriegaex
1. Januar 2017 um 14:09
Es ist nicht dumm @kriegaex, es ist eigentlich gut. Für den täglichen Gebrauch verwende ich in ConEmu verpacktes Git-Bash. Das Ergebnis ist das gleiche i.imgur.com/hMKz9D3r.png. Ich habe mein Problem beschrieben und Beispiele mit cmd.exe gegeben, um die Leute nicht mit anderen abhängigen Tools zu verwechseln, die ich verwende, da ich glaube, dass das Problem Shell-unabhängig ist und mit Git oder seiner Konfiguration selbst zusammenhängt.
– Marcin Kłopotek
1. Januar 2017 um 14:24
@jthill danke, diese Antwort scheint es zu tun, stackoverflow.com/a/55674760/4592648
– Montagsmüdigkeit
5. Januar 2022 um 10:48