Проблеми з кодуванням виводу журналу 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

Так, я спробував кілька кодових сторінок, включаючи 65001 (UTF-8), без результату. Здається, команда chcp не впливає на те, як відображається вивід журналу git. Він завжди відображається однаково.
Marcin Kłopotek

1
Вибачте, якщо питання звучить по-дурному, але чому ви взагалі використовуєте командний рядок Windows замість Git Bash? Краще підходить для використання Git, розмір вікна можна змінити на весь екран, підказка автоматично показує, у якій гілці ви перебуваєте тощо
kriegaex

Це не дурний @kriegaex, це насправді добре. Я використовую git-bash, загорнутий у ConEmu, для щоденного використання. Результат - той самий i.imgur.com/hMKz9D3r.png . Я описав свою проблему, даючи приклади з cmd.exe, щоб не плутати людей з іншими залежними інструментами, які я використовую, оскільки я вважаю, що проблема не залежить від оболонки і стосується Git або самої його конфігурації.
Marcin Kłopotek

Відповіді:


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типу string до розділу 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( catбудучи псевдонімом для Get-ContentPowerShell).


Набір LC_ALLне потрібен самому git. Інші інструменти, що постачаються із встановленим git-подібним less, що є пейджером за замовчуванням / див. Core.pager , використовують LC_ALLзначення. Іншими дійсними значеннями є локалізований lang, наприклад: LC_ALL=de_DE.UTF-8для німців.
повернення42

1
Ви можете встановити змінну-середу з командного рядка з допомогоюsetx LC_ALL C.UTF-8
аніон

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глобальному масштабі.

  • gitконфігурація. 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 у Windows 10.

Я переглядав відповіді і пробував багато з них. Рішення, які працювали для мене:

Ці рішення працюють окремо. Я вирішив використовувати команду Git, оскільки проблема, схоже, пов’язана з Git, а профіль Powershell залишається чистішим.


Дякую за налаштування Git. Налаштування Git працюють для мене, але також виявили, що налаштування $env:LESSCHARSET='utf-8'добре працюють і для PowerShell 5 у терміналі Windows.
млоскот

0

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


0

У мене була така проблема на Linux. І проблема полягала в тому, що я не генерував локалі. Отже, у мене localeбуло вміщено всі літери "С" без UTF-8. Щоб вирішити цю проблему, я прокоментував en_US.UTF-8і ru_RU.UTF-8в /etc/locale.gen. Потім я запускаю localectl set-locale LANG = ru_RU.UTF-8 і перезавантажуюсь. І перереєстровано в систему. Після цього цирилік відображався нормально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.