Problem
Wie wird die git log
Befehlsausgabe an der Windows-Eingabeaufforderung richtig angezeigt?
Beispiel
Wie Sie sehen können, kann ich diakritische Zeichen richtig eingeben, aber auf git log
der Ausgabe ist irgendwie entkommen. Gemäß der UTF-8
Codierungstabelle entsprechen die Codes zwischen spitzen Klammern ( <
und >
) von der Ausgabe den zuvor eingegebenen git config
Parametern.
Ich habe versucht, die LESSCHARSET
Umgebungsvariable utf-8
in einer der Antworten für ein ähnliches Problem auf " suggeriert" zu setzen, aber dann ist die Ausgabe verstümmelt:
Ich weiß, dass .git/config
es richtig codiert ist, utf-8
da es gitk
wie erwartet gehandhabt wird .
Hier ist locale
ggf. 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 :
Daher glaube ich, dass das Problem Shell-unabhängig ist und sich auf Git oder dessen Konfiguration selbst bezieht.
quelle
Antworten:
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:Dann genießen Sie das Ergebnis. Folgendes ist auf meiner Konsole passiert (Schriftart "Consolas", nicht
chcp
erforderlich):Aktualisieren:
type
(Anzeigedatei auf der Konsole) korrekt funktionieren, müssen Siechcp 65001
.cat
, profitieren Sie von den oben genanntenset LC_ALL=C.UTF-8
.Update 2: So machen Sie die Änderungen dauerhaft
Erstellen Sie , wie Benutzer mono blaine sagte, eine Umgebungsvariable
LC_ALL
und weisen Sie ihr den WertC.UTF-8
entweder global oder nur für Ihr eigenes Benutzerprofil zu (Entschuldigung für den deutschen Screenshot):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 NamenAutorun
type string zum Abschnitt zu öffnen undHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
ihm den Wert zuzuweisenchcp 65001
.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.txt
odercat -encoding UTF8 file.txt
(cat
als Alias fürGet-Content
in PowerShell) verwenden.quelle
LC_ALL
wird von Git selbst nicht benötigt. Andere Tools - im Lieferumfang der Git-Installation enthalten - wieless
der Standard-Pager / siehe core.pager verwenden denLC_ALL
Wert. Andere gültige Werte sind die lokalisierte Sprache, zB:LC_ALL=de_DE.UTF-8
für die Deutschen.setx LC_ALL C.UTF-8
$env.LC_ALL='ClUTF-8'
zu$Profile
Wenn sich jemand für das PowerShell-Äquivalent von interessiert
set LC_ALL=C.UTF-8
, ist dies:Dies funktioniert jedoch nur für die aktuelle Sitzung. Um es dauerhaft zu machen, zwei Möglichkeiten:
LC_ALL
mit dem WertC.UTF-8
$env:LC_ALL='C.UTF-8'
in Ihre$Profile
Datei einfügenquelle
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:
git config --global core.pager 'less --raw-control-chars'
$env:LC_ALL = 'C.UTF-8'
der aktuellen Powershell - ProfilDiese 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.
quelle
$env:LESSCHARSET='utf-8'
auch für PowerShell 5 im Windows-Terminal funktioniert.Ich benutze
git bash
aufWIN10
. Was mich betrifft, so erscheinen 4 Einstellungen wie erwartet.env
Rahmen. InLC_ALL=C.UTF-8
,LESSCHARSET=UTF-8
aufPATH
globaler Ebene.git
config.git config --global i18n.logOutputEncoding utf-8
.git bash
Rahmen. SetOptions-> Text-> Character set
zuutf-8
. Oder setzenlocale
undCharacter set
beides aufdefault
. Es ist klug genug, das Richtige zu wählenencoding
.Getan.
quelle
git
Windows-Eingabeaufforderung, und die ersten beiden Schritte haben das Problem für meinen Fall behoben.Ich musste die Windows-PowerShell-Eingabeaufforderung anstelle der Standard-Eingabeaufforderung (Windowkey + X) verwenden.
quelle
Ich hatte ein solches Problem unter Linux. Und das Problem war, dass ich keine Gebietsschemas generiert habe. Meine Ausgabe von
locale
war also, alle "C" -Buchstaben ohne UTF-8 zu speichern. Um dies zu lösen, habe ich unkommentierten_US.UTF-8
undru_RU.UTF-8
in /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.quelle