如何使
git log
命令输出在Windows CLI终端中正确显示?
如您所见,我可以正确输入变音字符,但在
git log
上,输出以某种方式被转义。根据UTF-8
编码表,输出中尖括号(<
和>
)之间的代码对应于先前键入的git config
参数。
我尝试按照
one of the answers for similar issue中的建议将
LESSCHARSET
环境变量设置为utf-8
,但随后输出出现乱码:
我知道
.git/config
使用 UTF-8 正确编码,因为它按预期由 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=
所以我认为问题是独立于 shell 的,并且与 Git 或其配置本身有关。
好吧,我做了一些实验,发现 Windows Git 命令实际上需要像
LC_ALL
这样的 UNIX 变量才能正确显示波兰语(或其他 UTF-8 字符)。试试这个命令:
set LC_ALL=C.UTF-8
然后享受结果。这是我的控制台上发生的事情(字体“Consolas”,不需要
chcp
):
更新:
type
(在控制台上显示文件)这样的 Windows 命令正常工作,您确实需要 chcp 65001
.cat
,您可以从上述 set LC_ALL=C.UTF-8
中获益。更新 2:如何使更改永久化
正如用户 mono blaine 所说,创建一个环境变量
LC_ALL
并为其分配值 C.UTF-8
,无论是全局还是仅针对您自己的用户配置文件(抱歉德国截图):
下次打开命令处理器控制台 (cmd.exe) 时,您应该在发出命令
echo %LC_ALL%
时看到变量值。在 PowerShell 中,您应该在发出 $env:LC_ALL
. 时看到它
使 UTF-8 代码页永久化的最简单方法是打开
regeedit
并向部分添加一个名为 Autorun
的字符串类型的新值
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
并为其赋值 chcp 65001
.
以后,每次打开一个新的cmd.exe控制台都会执行这个命令。您甚至可以在新窗口中看到它的输出:“Aktive Codepage: 65001”。 (或您各自语言的类似内容)。
哦,顺便说一下:为了在 PowerShell 中正确显示 UTF-8 编码的文件,您可以使用
Get-Content -encoding UTF8 file.txt
或 cat -encoding UTF8 file.txt
(cat
是 Get-Content
在 PowerShell 中的别名)。
如果有人对
set LC_ALL=C.UTF-8
的 PowerShell 等价物感兴趣,那就是:
$env:LC_ALL='C.UTF-8'
然而,这仅适用于当前会话。要使其永久化,有两种可能性:
LC_ALL
的环境变量,其值为C.UTF-8
$env:LC_ALL='C.UTF-8'
放入您的$Profile
文件我在 Windows 10 上的Windows 终端 内通过Powershell Core v7.0.3 使用Git。
我一直在浏览答案并尝试了很多答案。对我有用的解决方案是:
git config --global core.pager 'less --raw-control-chars'
$env:LC_ALL = 'C.UTF-8'
到当前的Powershell配置文件这些解决方案都可以单独使用。我选择使用 Git 命令,因为问题似乎与 Git 有关,并且 Powershell 配置文件保持清洁。
我在
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
.完成
我必须使用 Windows powershell 命令提示符而不是默认命令提示符 (Windowkey + X)
我在 Linux 上有这样的问题。问题是我没有生成语言环境。所以我的
locale
输出包含所有“C”字母,没有 UTF-8。
为了解决这个问题,我取消了 /etc/locale.gen 中的 en_US.UTF-8
和 ru_RU.UTF-8
的注释。然后我运行 localectl set-locale LANG=ru_RU.UTF-8 并重新启动。并重新登录系统。之后cirylic正常显示。
git config --global core.pager 'less --raw-control-chars'
#Or
git config --global core.pager 'more'