Problem
Jak git log
prawidłowo wyświetlić dane wyjściowe polecenia w wierszu polecenia systemu Windows?
Przykład
Jak widać, mogę poprawnie wpisywać znaki diakrytyczne, ale na git log
wyjściu jest jakoś uciekany. Zgodnie z UTF-8
tabelą kodowania kody między nawiasami kątowymi ( <
i >
) na wyjściu odpowiadają wcześniej wpisanym git config
parametrom.
Próbowałem ustawić LESSCHARSET
zmienną środowiskową utf-8
jako sugerowaną w jednej z odpowiedzi na podobny problem, ale wynik jest zniekształcony:
Wiem, że .git/config
jest prawidłowo zakodowany, utf-8
ponieważ jest obsługiwany gitk
zgodnie z oczekiwaniami.
Oto locale
wyjście polecenia, jeśli to konieczne
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=
EDYTOWAĆ:
Wynik jest taki sam również w czystym git-bash :
więc uważam, że problem jest niezależny od powłoki i dotyczy Gita lub samej jego konfiguracji.
źródło
Odpowiedzi:
Dobra, trochę poeksperymentowałem i odkryłem, że polecenia Windows Git faktycznie potrzebują zmiennych UNIX, takich jak
LC_ALL
w celu prawidłowego wyświetlania polskich (lub innych znaków UTF-8). Po prostu spróbuj tego polecenia:Następnie ciesz się wynikiem. Oto, co się stało na mojej konsoli (czcionka „Consolas”, nie jest
chcp
konieczna):Aktualizacja:
type
(wyświetl plik na konsoli) działały poprawnie, potrzebujeszchcp 65001
.cat
Ty korzystasz z wyżej wymienionychset LC_ALL=C.UTF-8
.Aktualizacja 2: Jak wprowadzić zmiany na stałe
Jak powiedział użytkownik mono blaine , utwórz zmienną środowiskową
LC_ALL
i przypisz jej wartośćC.UTF-8
, globalnie lub tylko dla własnego profilu użytkownika (przepraszam za niemiecki zrzut ekranu):Następnym razem, gdy otworzysz konsolę procesora poleceń (cmd.exe), powinieneś zobaczyć wartość zmiennej podczas wydawania polecenia
echo %LC_ALL%
. W PowerShell powinieneś to zobaczyć podczas wydawania$env:LC_ALL
.Najprostszym sposobem na utrwalenie strony kodowej UTF-8 jest otwarcie
regeedit
i dodanie nowej wartości o nazwieAutorun
typu string do sekcjiHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
i przypisanie jej wartościchcp 65001
.Odtąd to polecenie będzie wykonywane przy każdym otwarciu nowej konsoli cmd.exe. Możesz nawet zobaczyć jego wynik w nowym oknie: „Aktywna strona kodowa: 65001”. (lub podobny w Twoim języku).
Aha, tak przy okazji: aby poprawnie wyświetlić plik zakodowany w UTF-8 w PowerShell, możesz użyć
Get-Content -encoding UTF8 file.txt
orcat -encoding UTF8 file.txt
(cat
będącego aliasem dlaGet-Content
w PowerShell).źródło
LC_ALL
nie jest potrzebny samemu gitowi. Inne narzędzia - dostarczane z instalacją git - podobnie jakless
domyślny pager / zobacz core.pager używająLC_ALL
wartości. Inne ważne wartości to język zlokalizowany, np.LC_ALL=de_DE.UTF-8
Dla Niemców.setx LC_ALL C.UTF-8
$env.LC_ALL='ClUTF-8'
do$Profile
Jeśli ktoś jest zainteresowany odpowiednikiem PowerShell
set LC_ALL=C.UTF-8
to to:Jednak działa to tylko dla bieżącej sesji. Aby to było trwałe, istnieją dwie możliwości:
LC_ALL
z wartościąC.UTF-8
$env:LC_ALL='C.UTF-8'
w swoim$Profile
plikuźródło
Używam
git bash
dalejWIN10
. Jak dla mnie, 4 ustawienia wyglądają jak moje oczekiwania.env
oprawa. DodajLC_ALL=C.UTF-8
,LESSCHARSET=UTF-8
abyPATH
na całym świecie.git
config.git config --global i18n.logOutputEncoding utf-8
.git bash
oprawa. UstawOptions-> Text-> Character set
nautf-8
. Lub ustawlocale
iCharacter set
oba nadefault
. Wystarczy wybrać właściwyencoding
.Gotowe.
źródło
git
w wierszu poleceń systemu Windows i pierwsze dwa kroki rozwiązały problem w moim przypadku.Używam Git przez Powershell Core v7.0.3 z posh-git zainstalowanym w terminalu Windows w systemie Windows 10.
Przeglądałem odpowiedzi i wypróbowałem wiele z nich. Rozwiązania, które sprawdziły się u mnie to:
$env:LC_ALL = 'C.UTF-8'
do bieżącego profilu Powershellgit config --global core.pager 'less --raw-control-chars'
Te rozwiązania działają oddzielnie. Zdecydowałem się użyć polecenia Git, ponieważ problem wydaje się być związany z Gitem, a profil Powershell pozostaje czystszy.
źródło
$env:LESSCHARSET='utf-8'
działa dobrze również dla PowerShell 5 w terminalu Windows.Musiałem użyć wiersza poleceń programu Windows PowerShell zamiast domyślnego (Windowkey + X)
źródło
Miałem taki problem na Linuksie. Problem polegał na tym, że nie wygenerowałem lokalizacji. Więc moim wyjściem
locale
było kantowanie wszystkich liter "C", bez UTF-8. Aby rozwiązać ten problem, odkomentowałemen_US.UTF-8
iru_RU.UTF-8
w /etc/locale.gen. Następnie uruchamiam localectl set-locale LANG = ru_RU.UTF-8 i restartuję. I ponownie zalogowany do systemu. Po tym cyryllic był wyświetlany normalnie.źródło