【问题标题】:git log output encoding issues on Windows 10 CLI terminalWindows 10 CLI 终端上的 git log 输出编码问题
【发布时间】:2017-04-29 13:47:30
【问题描述】:

问题

如何使git log 命令输出正确显示在 Windows CLI 终端上?

示例

如您所见,我可以正确键入变音字符,但在git log 上,输出以某种方式被转义。根据UTF-8 encoding table,输出中尖括号(<>)之间的代码对应于先前键入的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 或其配置本身有关。

【问题讨论】:

  • 你试过“Unicode characters in Windows command line - how?”中的解决方案了吗?
  • 是的,我尝试了几个代码页,包括 65001 (UTF-8),但没有任何结果。似乎 chcp 命令对 git log 输出的显示方式没有影响。它始终以相同的方式显示。
  • 对不起,如果这个问题听起来很愚蠢,但你为什么要使用 Windows 命令提示符而不是 Git Bash?它更适合使用 Git,窗口可调整到全屏,提示会自动显示您所在的分支等。
  • 这不是愚蠢的@kriegaex,实际上它很好。我正在使用包装在 ConEmu 中的 git-bash 以供日常使用。结果是相同的i.imgur.com/hMKz9D3r.png。我已经用 cmd.exe 举例说明了我的问题,以免将人们与正在使用的其他相关工具混淆,因为我认为问题与 shell 无关,并且与 Git 或其配置本身有关。
  • @jthill 谢谢,这个答案似乎可以做到,stackoverflow.com/a/55674760/4592648

标签: git terminal character-encoding command-line-interface locale


【解决方案1】:

好的,我做了一些实验,发现 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.txtcat -encoding UTF8 file.txtcat 是 PowerShell 中 Get-Content 的别名)。

【讨论】:

  • Set LC_ALL 不是 git 本身所需要的。其他工具——与 git installaion 一起提供——比如less,它是默认的寻呼机/参见core.pager,使用的是LC_ALL 值。其他有效值是本地化语言,例如:LC_ALL=de_DE.UTF-8 代表德国人。
  • 您可以使用setx LC_ALL C.UTF-8从命令行设置环境变量
  • ConEmu中的Powershell 6,将$env.LC_ALL='ClUTF-8'添加到$Profile就足够了
  • rscript 实用程序(用于运行 r 代码的命令行工具)存在编码问题,此建议也有助于修复它。谢谢!
  • 知道为什么执行“git log”会给我正确的 utf-8 编码,但执行“git log > log.txt”会再次弄乱它的编码?
【解决方案2】:

如果有人对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 文件中

【讨论】:

  • 或将其添加到您的 PowerShell 配置文件(我更喜欢这个而不是全局设置,因为我在多台机器上使用相同的配置文件 - 通过 git)。
  • 可以编辑配置文件,例如运行:notepad $profile 然后在某处添加一行作为 mono blaine 建议的行,$env:LC_ALL='C.UTF-8'
  • 在 Windows 10 上使用 PowerShell 6 + ConEmu:这行得通,不需要其他任何东西
【解决方案3】:

我不得不使用 windows powershell 命令提示符而不是默认的 (Windowkey + X)

【讨论】:

    【解决方案4】:

    我在WIN10 上使用git bash。至于我,4个设置使外观符合我的期望。

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

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

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

    完成。

    【讨论】:

    • 我在 Windows 命令提示符下使用git,前两个步骤解决了我的问题。
    • 前两步也有助于解决 vs-code 时间线编码问题
    【解决方案5】:

    我在 Linux 上遇到过这样的问题。问题是我没有生成语言环境。所以我的locale 输出包含所有“C”字母,没有UTF-8。 为了解决这个问题,我在 /etc/locale.gen 中取消了 en_US.UTF-8ru_RU.UTF-8 的注释。然后我运行 localectl set-locale LANG=ru_RU.UTF-8 并重新启动。并重新登录系统。之后 ciryllic 正常显示。

    【讨论】:

      【解决方案6】:

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

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

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

      【讨论】:

      • 感谢 Git 设置。 Git 设置适用于我,但也发现设置 $env:LESSCHARSET='utf-8' 也适用于 Windows 终端中的 PowerShell 5。
      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 2019-02-16
      • 2018-05-08
      • 1970-01-01
      • 2019-02-27
      • 2018-08-07
      • 2021-02-24
      • 2017-01-21
      相关资源
      最近更新 更多