problemy z kodowaniem Git log w wierszu polecenia Windows 10
Problem
Jak sprawić, by wyjście polecenia git log
było poprawnie wyświetlane w wierszu polecenia systemu windows?
Przykład
Jak widać mogę poprawnie wpisywać znaki diakrytyczne, ale na git log
wyjście jest jakoś unikalne. Według UTF-8
tabela kodowania kody pomiędzy nawiasami kątowymi (<
i >
) z wyjścia odpowiadają wcześniej wpisanym parametrom git config
.
Próbowałem ustawić LESSCHARSET
środowisko zmienna do {[8] } jako sugested w jedna z odpowiedzi na podobny problem ale wtedy wyjście jest zniekształcone:
Wiem, że .git/config
jest poprawnie zakodowane utf-8
, ponieważ jest obsługiwane przez gitk
zgodnie z oczekiwaniami.
Oto locale
wyjście polecenia w razie potrzeby
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=
EDIT:
Wyjście jest takie samo również w czystym git-bash :
Więc wierzę, że problem jest niezależna od powłoki i odnosi się do Gita lub jego samej konfiguracji.
6 answers
Dobra, trochę poeksperymentowałem i dowiedziałem się, że polecenia Git w systemie Windows potrzebują zmiennych uniksowych, takich jak LC_ALL
, aby poprawnie wyświetlać polskie (lub inne znaki UTF-8). Po prostu spróbuj tego polecenia:
set LC_ALL=C.UTF-8
Ciesz się wynikiem. Oto, co stało się na mojej konsoli (czcionka "Consolas", nie chcp
konieczne):
Update:
- Cóż, aby komendy Windows takie jak
type
(Wyświetl plik na konsoli) działały poprawnie, potrzebujeszchcp 65001
. - a jeśli wolisz polecenia z Git Basha, takie jak
cat
zyskujesz na wspomnianymset LC_ALL=C.UTF-8
.
Aktualizacja 2: Jak sprawić, by zmiany stały
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 (sorry za Niemiecki screenshot):
Następnym razem, gdy otworzysz konsolę procesora poleceń (cmd.exe) powinieneś zobaczyć wartość zmiennej podczas wydawania polecenia echo %LC_ALL%
. W PowerShell powinieneś go zobaczyć podczas wydawania $env:LC_ALL
.
Najprostszym sposobem na stałe otwarcie strony kodowej UTF-8 regeedit
i dodanie nowej wartości o nazwie Autorun
typu string do sekcji
{[13] } i przypisać mu wartość chcp 65001
.
Odtąd Komenda ta będzie wykonywane za każdym razem, gdy otwierasz nowy cmd.konsola exe. Możesz nawet zobaczyć jego wyjście w nowym oknie: "Aktive Codepage: 65001."(lub podobne w danym języku).
Przy okazji: aby poprawnie wyświetlić kodowany plik UTF-8 W PowerShell możesz użyć Get-Content -encoding UTF8 file.txt
lub cat -encoding UTF8 file.txt
(cat
BYĆ aliasem dla Get-Content
w PowerShell).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-31 03:45:36
Jeśli ktoś jest zainteresowany odpowiednikiem PowerShell set LC_ALL=C.UTF-8
, to znaczy:
$env:LC_ALL='C.UTF-8'
Jednak działa to tylko dla bieżącej sesji. Aby uczynić go trwałym, dwie możliwości:
- Utwórz zmienną środowiskową o nazwie
LC_ALL
z wartościąC.UTF-8
- lub umieść
$env:LC_ALL='C.UTF-8'
w swoim$Profile
pliku
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-19 09:54:36
Używam Git Poprzez PowerShell Core v7.0.3 z posh-git zainstalowanym wewnątrz Windows Terminal w systemie Windows 10.
Przeglądałem odpowiedzi i próbowałem wielu z nich. Rozwiązania, które działały dla mnie były:
-
Zmień ustawienie Git :
git config --global core.pager 'less --raw-control-chars'
- dodaj
$env:LC_ALL = 'C.UTF-8'
do bieżącego profilu Powershell
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-09 18:06:07
Używam git bash
Na WIN10
. Jeśli chodzi o mnie, 4 Ustawienia sprawiają, że wygląd jest moim oczekiwaniem.
env
ustawienie. DodajLC_ALL=C.UTF-8
,LESSCHARSET=UTF-8
doPATH
globalnie.git
config.git config --global i18n.logOutputEncoding utf-8
.git bash
ustawienie. UstawOptions-> Text-> Character set
nautf-8
. Lub ustawićlocale
iCharacter set
nadefault
. Jest wystarczająco inteligentny, aby wybrać właściwyencoding
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-11 11:39:43
Musiałem użyć wiersza polecenia Windows powershell zamiast domyślnego (Windowkey + X)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-28 20:09:37
Miałem taki problem na Linuksie. Problem polegał na tym, że nie generowałem lokalizacji. Więc mój wynik locale
był w stanie zapisać wszystkie litery "C", bez UTF-8.
Aby to rozwiązać, dodałem en_US.UTF-8
i ru_RU.UTF-8
w /etc / locale.gen. następnie uruchamiam localectl set-locale lang=ru_RU.UTF-8 i restart. I przekierowany do systemu. Po tym cirylic był wyświetlany normalnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-03 19:25:37