Проблемы с кодировкой вывода журнала git в командной строке Windows 10

88

Проблема

Как сделать так, чтобы git logвывод команды правильно отображался в командной строке Windows?

пример

последовательность команд git, приводящая к проблеме Как видите, я могу правильно набирать диакритические символы, но на git logвыходе это каким-то образом экранировано. Согласно UTF-8таблице кодирования, коды между угловыми скобками ( <и >) на выходе соответствуют ранее введенным git configпараметрам.

Я попытался установить для LESSCHARSETпеременной среды значение, utf-8указанное в одном из ответов на аналогичную проблему, но затем вывод искажен:

вывод журнала git после установки LESSCHARSET = utf8

Я знаю, .git/configчто кодируется правильно, так utf-8как он обрабатывается, gitkкак ожидалось.

Правильный вывод gitk

Вот localeвывод команды, если необходимо

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=

РЕДАКТИРОВАТЬ:

Вывод такой же и в чистом git-bash :

введите описание изображения здесь

поэтому я считаю, что проблема не зависит от оболочки и связана с Git или его конфигурацией.

Марцин Клопотек
источник
2
Вы пробовали решение в разделе « Символы Unicode в командной строке Windows - как? »?
jth
Да, я пробовал несколько кодовых страниц, включая 65001 (UTF-8), безрезультатно. Кажется, что команда chcp не влияет на то, как отображается вывод журнала git. Он всегда отображается одинаково.
Марцин Клопотек
1
Извините, если вопрос звучит глупо, но почему вы вообще используете командную строку Windows вместо Git Bash? Он лучше подходит для использования Git, размер окна можно изменять до полного экрана, в подсказке автоматически отображается, в какой ветке вы находитесь и т. Д.
kriegaex
Это не глупо @kriegaex, на самом деле это хорошо. Я использую git-bash, завернутый в ConEmu, для повседневного использования. Результат тот же i.imgur.com/hMKz9D3r.png . Я описал свою проблему, приводя примеры с cmd.exe, чтобы не путать людей с другими используемыми зависимыми инструментами, поскольку я считаю, что проблема не зависит от оболочки и связана с Git или его конфигурацией.
Марцин Клопотек

Ответы:

157

Хорошо, я немного поэкспериментировал и обнаружил, что командам Windows Git действительно нужны переменные UNIX, например LC_ALL, для правильного отображения польского языка (или других символов UTF-8). Просто попробуйте эту команду:

set LC_ALL=C.UTF-8

Тогда наслаждайтесь результатом. Вот что произошло на моей консоли (шрифт Consolas, chcpнеобязательно):

Консоль Windows CMD


Обновить:

  • Что ж, для того, чтобы команды Windows, такие как type(отобразить файл на консоли), работали правильно, вам необходимо chcp 65001.
  • И если вы предпочитаете команды из Git Bash, как catи вышеперечисленное set LC_ALL=C.UTF-8.

Консоль Windows CMD, часть 2


Обновление 2: как сделать изменения постоянными

Как сказал пользователь моно Блейн , создайте переменную среды LC_ALLи присвойте ей значение C.UTF-8либо глобально, либо только для вашего собственного профиля пользователя (извините за скриншот на немецком языке):

Создать переменную среды

В следующий раз, когда вы откроете консоль командного процессора (cmd.exe), вы должны увидеть значение переменной при вводе команды echo %LC_ALL%. В PowerShell вы должны увидеть это при выпуске $env:LC_ALL.

Самый простой способ сделать кодовую страницу UTF-8 постоянной - это открыть regeeditи добавить новое значение с именем Autorunстроки типа в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processorи присвоить ему значение chcp 65001.

Редактор регистрации

Отныне эта команда будет выполняться каждый раз при открытии новой консоли cmd.exe. Вы даже видите его вывод в новом окне: «Aktive Codepage: 65001.» (или аналогичный на вашем соответствующем языке).

О, кстати: чтобы правильно отобразить файл в кодировке UTF-8 в PowerShell, вы можете использовать Get-Content -encoding UTF8 file.txtили cat -encoding UTF8 file.txt( в PowerShell catэто псевдоним Get-Content).

kriegaex
источник
Набор LC_ALLне требуется самый мерзавец. Другие инструменты, поставляемые с git installaion, как lessпейджер по умолчанию / см. Core.pager , используют это LC_ALLзначение. Другие допустимые значения - это локализованный язык, например: LC_ALL=de_DE.UTF-8для немецкого языка.
return42
1
вы можете установить переменную среды из командной строки, используяsetx LC_ALL C.UTF-8
anion
Powershell 6 в ConEmu, это было достаточно , чтобы добавить $env.LC_ALL='ClUTF-8'к$Profile
Andrew Spencer
66

Если кого-то интересует эквивалент PowerShell set LC_ALL=C.UTF-8, то это:

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

Однако это работает только для текущего сеанса. Чтобы сделать его постоянным, есть две возможности:

  • создать переменную среды LC_ALLс именем со значениемC.UTF-8
  • или поместите $env:LC_ALL='C.UTF-8'в свой $Profileфайл
моно блейн
источник
1
Или добавьте его в свой профиль PowerShell (я предпочитаю это глобальному параметру, потому что я использую один и тот же профиль - через git - на нескольких машинах).
Ричард
3
Файл профиля можно отредактировать, например, запустив: notepad $ profile Затем добавьте строку где-нибудь, как предложено моноблейном, $ env: LC_ALL = 'C.UTF-8'
Tore Aurstad
С PowerShell 6 + ConEmu в Windows 10: это работает, больше ничего не нужно
Эндрю Спенсер,
5

Пользуюсь git bashна WIN10. Что касается меня, 4 настройки выглядят как мои ожидания.

  • envнастройка. Добавить LC_ALL=C.UTF-8, LESSCHARSET=UTF-8в PATHглобальном масштабе.

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

  • git bashнастройка. Установите Options-> Text-> Character setна utf-8. Или установите localeи Character setоба в default. Достаточно умен, чтобы выбрать правильный encoding.

Выполнено.

В. Перрен
источник
Я использую gitкомандную строку Windows, и первые два шага решили проблему в моем случае.
nglee
5

Я использую Git через Powershell Core v7.0.3 с posh-git, установленным внутри Windows Terminal в Windows 10.

Я просматривал ответы и пробовал многие из них. Для меня сработали следующие решения:

Оба эти решения работают отдельно. Я решил использовать команду Git, поскольку проблема, похоже, связана с Git, а профиль Powershell остается более чистым.

Айше Нур
источник
Спасибо за настройку Git. У меня работают настройки Git, но я также обнаружил, что настройка также $env:LESSCHARSET='utf-8'отлично работает для PowerShell 5 в Терминале Windows.
mloskot
0

Мне пришлось использовать командную строку Windows PowerShell вместо стандартной (Windowkey + X)

Джон Ктеджик
источник
0

У меня была такая проблема на Linux. И проблема была в том, что я не создавал локали. Таким образом, мой вывод localeсодержал все буквы "C" без UTF-8. Чтобы решить эту проблему, я раскомментировал en_US.UTF-8и ru_RU.UTF-8в /etc/locale.gen. Затем я запускаю localectl set-locale LANG = ru_RU.UTF-8 и перезагружаюсь. И повторно подключился к системе. После этого кириллица отображалась нормально.

Акула
источник