Вывод git diff не обрабатывается правильно в powershell - PullRequest
0 голосов
/ 06 сентября 2018

Я прочитал несколько тестов на эту проблему, но ни один из них не дал ответа. Есть обходной путь, о котором я здесь снова говорю, но я хочу понять и решить проблему.

Проблема

Проблема в том, что выполнение команды git diff reva revb | Out-File mypatch.patch в powershell создает, например, "символы мусора" вместо. Немецкие умлауты (├ñ вместо ä).

Исследование

Когда я выполняю $Env:LESSCHARSET="utf8", как предложено в некоторых тестах, я получаю правильный вывод в терминале, но как только он перенаправляется в файл mypatch.patch, умлауты (и другие символы) искажаются. Четный git --no-pager diff reva revb приводит к правильному выводу в терминале. Но как только вы хотите передать это в файл, это неправильно. То, что вы видите, это , а не , что вы получаете!

Мне кажется, что ввод в Out-File уже искажен, и поэтому установка аргумента -Encoding ничего не меняет. Я не думаю, что Out-File виноват здесь. Например, команда $mypatch = git diff reva revb (даже с добавлением --no-pager перед diff) приводит к переменной, например, Символ евро или умлауты выглядят искаженными (¼é¼ вместо €), когда эта переменная выводится на терминал.

Я пробовал PowerShell 5.1 и ядро ​​PowerShell с открытым исходным кодом 6.0.4 в Windows 10 (1709). Я использую git 2.18.0.windows.1. Он прекрасно работает с командной строкой Windows (cmd), поэтому простой обходной путь - вызов из консоли powershell:

Обход

cmd /c "git diff reva revb > mypatch.patch"

Вопрос

Как это работает только с powershell?

1 Ответ

0 голосов
/ 11 марта 2019

Возможно, проблема связана с неправильной настройкой [Console]::OutputEncoding. Если он не установлен в UTF8, попробуйте установить его: [Console]::OutputEncoding = [System.Text.Encoding]::UTF8.

Не имеет значения, используете ли вы тогда $Env:LESSCHARSET, соответственно, я считаю, что он больше не используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...