我已经阅读了几个有关此问题的QA,但没有一个提供答案。有一种解决方法,我在这里再次说明,但我想了解并解决问题。
问题
问题是在Powershell中执行命令git diff reva revb | Out-File mypatch.patch
会产生“垃圾字符”,而不是例如德语变音符(├ñ代替ä)。
调查
当我按照某些质量检查中的建议执行$Env:LESSCHARSET="utf8"
时,在终端上确实得到了正确的输出,但是一旦将其重定向到文件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核心6.0.4。我使用git 2.18.0.windows.1。它可以与Windows命令行(cmd)正常工作,因此简单的解决方法是从powershell控制台调用:
解决方法
cmd /c "git diff reva revb > mypatch.patch"
问题
这仅适用于powershell吗?
答案 0 :(得分:0)
该问题似乎是由错误的[Console]::OutputEncoding
设置引起的。如果未将其设置为UTF8,请尝试将其设置为:[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
。
然后分别使用$Env:LESSCHARSET
并不重要,我相信它已不再使用。