Windows 10 CLI 终端中的“git log”输出编码问题

问题描述 投票:0回答:7

问题

如何使

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=

Git Bash 中的输出也是一样的

所以我认为问题是独立于 shell 的,并且与 Git 或其配置本身有关。

git terminal character-encoding command-line-interface locale
7个回答
174
投票

好吧,我做了一些实验,发现 Windows Git 命令实际上需要像

LC_ALL
这样的 UNIX 变量才能正确显示波兰语(或其他 UTF-8 字符)。试试这个命令:

set LC_ALL=C.UTF-8

然后享受结果。这是我的控制台上发生的事情(字体“Consolas”,不需要

chcp
):


更新:

  • 好吧,为了像
    type
    (在控制台上显示文件)这样的 Windows 命令正常工作,您确实需要
    chcp 65001
    .
  • 如果您更喜欢来自 Git Bash 的命令,例如
    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 中的别名)。


73
投票

如果有人对

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
    文件

10
投票

我在 Windows 10 上的Windows 终端 内通过Powershell Core v7.0.3 使用Git

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

这些解决方案都可以单独使用。我选择使用 Git 命令,因为问题似乎与 Git 有关,并且 Powershell 配置文件保持清洁。


7
投票

我在

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
    .

完成


1
投票

我必须使用 Windows powershell 命令提示符而不是默认命令提示符 (Windowkey + X)


1
投票

我在 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正常显示。


0
投票
git config --global core.pager 'less --raw-control-chars'
 
#Or

git config --global core.pager 'more'
© www.soinside.com 2019 - 2024. All rights reserved.