And*_*eas 6 windows git powershell git-diff character-encoding
我已经阅读了几个关于这个问题的 QA,但没有一个提供答案。有一个变通方法,我在这里再次说明,但我想了解并解决问题。
问题
问题是git diff reva revb | Out-File mypatch.patch
在 powershell中执行命令会产生“垃圾字符”来代替德语元音变音(?ñ 而不是 ä)。
调查
当我按照$Env:LESSCHARSET="utf8"
某些 QA 中的建议执行时,我确实在终端中获得了正确的输出,但是一旦将其重定向到文件mypatch.patch
,变音符号(和其他字符)就会被破坏。甚至git --no-pager diff reva revb
会在终端中产生正确的输出。但是,一旦您想将其通过管道传输到文件,那就错了。你看到的不是你得到的!
在我看来,输入到Out-File
已经被破坏,因此设置-Encoding
参数不会改变任何东西。我不认为Out-File
是这里的罪魁祸首。例如,该命令$mypatch = git diff reva revb
(即使在 diff 之前添加了 --no-pager)会导致一个变量,例如欧元符号或变音符号在该变量被打印到终端时出现错位(Ôé¼ 而不是 €)。
我在 Windows 10 (1709) 上尝试了 powershell 5.1 和开源 powershell core 6.0.4。我使用 git 2.18.0.windows.1。它适用于 windows 命令行 (cmd),因此简单的解决方法是从 powershell 控制台调用:
解决方法
cmd /c "git diff reva revb > mypatch.patch"
题
这仅适用于 PowerShell 是如何工作的?
该问题似乎是由错误设置引起的[Console]::OutputEncoding
。如果未设置为 UTF8,请尝试设置:[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
。
如果您随后使用 也没关系$Env:LESSCHARSET
,我相信它不再使用了。
归档时间: |
|
查看次数: |
1184 次 |
最近记录: |