Windows 10命令提示符上的git日志输出编码问题


88

问题

如何使git log命令输出正确显示在Windows命令提示符下?

git命令序列导致问题 如您所见,我可以正确键入变音字符,但git log输出会以某种方式转义。根据UTF-8编码表,输出中尖括号(<>)之间的代码对应于先前键入的git config参数。

我曾尝试将LESSCHARSET环境变量设置utf-8针对类似问题的答案之一,但是输出出现乱码:

设置LESSCHARSET = utf8后的git log输出

我知道它已按预期方式.git/config正确编码。utf-8gitk

正确的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
您是否尝试过“ Windows命令行中的Unicode字符-怎么样? ”解决方案?
jthill '16

是的,我尝试了多个代码页,包括65001(UTF-8),但没有任何结果。看来chcp命令对git log输出的显示方式没有影响。始终以相同的方式显示。
MarcinKłopotek

1
抱歉,这个问题听起来很愚蠢,但是为什么要使用Windows命令提示符而不是Git Bash?它更适合使用Git,窗口可调整为全屏,提示会自动显示您所在的分支,等等
。– kriegaex

这不是愚蠢的@kriegaex,实际上很好。我将git-bash包裹在ConEmu中用于日常使用。结果与i.imgur.com/hMKz9D3r.png相同。我已经用cmd.exe举例说明了我的问题,以使人们不会将其与正在使用的其他依赖工具混淆,因为我认为问题是与Shell无关的,并且与Git或其配置本身有关。
MarcinKłopotek'17

Answers:


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:如何使更改永久

正如用户mono blaine所说的那样,创建一个环境变量LC_ALL并将其值赋给C.UTF-8全局或仅用于您自己的用户配置文件(对不起,德语截图):

创建环境变量

下次打开命令处理器控制台(cmd.exe)时,应该在发出命令时看到变量值echo %LC_ALL%。在PowerShell中,您应该在发布时看到它$env:LC_ALL

使UTF-8代码页永久打开regeeditAutorun在section中添加一个新的类型为string HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor的值并将其赋值的最简单方法chcp 65001

注册编辑

此后,每次打开新的cmd.exe控制台时,将执行此命令。您甚至可以在新窗口中看到其输出:“ Aktive代码页:65001”。(或您所用语言的相似语言)。

哦,顺便说一句:为了在PowerShell中正确显示UTF-8编码的文件,您可以使用Get-Content -encoding UTF8 file.txtcat -encoding UTF8 file.txt(在PowerShell中cat是别名Get-Content)。


LC_ALLgit本身不需要设置。其他工具-随git installaion一起提供-例如less,这是默认的分页器/请参阅core.pager正在使用该LC_ALL值。其他有效值是本地语言,例如:LC_ALL=de_DE.UTF-8对于德国人。
return42 '17

1
您可以使用setx LC_ALL C.UTF-8
anion

PowerShell的6 ConEmu,这足以补充$env.LC_ALL='ClUTF-8'$Profile
安德鲁·斯宾塞

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
轮廓文件可以通过例如运行进行编辑:记事本$轮廓然后添加一行某处为单声道布莱恩建议,$ ENV:LC_ALL =“C.UTF-8”
撕Aurstad

使用Windows 10上的PowerShell 6 + ConEmu:可以运行,不需要任何其他操作
Andrew Spencer

5

我用的git bashWIN10。对于我来说,四个设置使外观符合我的期望。

  • env设置。将LC_ALL=C.UTF-8,添加LESSCHARSET=UTF-8PATH全局。

  • git配置。git config --global i18n.logOutputEncoding utf-8

  • git bash设置。设置Options-> Text-> Character setutf-8。或将localeCharacter set都设置为default。选择正确的方法足够聪明encoding

做完了


git在Windows命令提示符下使用,并且前两个步骤针对我的情况解决了该问题。
nglee

5

我正在通过Powershell Core v7.0.3和Windows 10的Windows Terminal中安装的posh-git使用Git

我一直在浏览答案,并尝试了许多答案。对我有用的解决方案是:

这些解决方案均单独工作。我选择使用Git命令,因为问题似乎与Git有关,并且Powershell配置文件更干净。


感谢您的Git设置。Git设置适用于我,但也发现该设置$env:LESSCHARSET='utf-8'也适用于Windows终端中的PowerShell 5。
mloskot


0

我在Linux上有这样的问题。问题是我没有生成语言环境。因此,我的输出locale是保留所有“ C”字母,而没有UTF-8。为了解决这个问题,我的注释去掉,en_US.UTF-8ru_RU.UTF-8在文件/etc/locale.gen。然后,我运行localectl set-locale LANG = ru_RU.UTF-8并重新启动。并重新登录系统。之后,圆环正常显示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.