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

wpx232ag  于 2023-05-21  发布在  Git
关注(0)|答案(7)|浏览(141)

问题

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

示例

正如您所看到的,我可以正确地输入变音字符,但是在git log上,输出被转义了。根据UTF-8 encoding table,输出中尖括号(<>)之间的代码对应于之前键入的git config参数。
我尝试将LESSCHARSET环境变量设置为utf-8,如one of the answers for similar issue中所建议的,但输出结果乱码:

我知道.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或其配置本身有关。

tv6aics1

tv6aics11#

好吧,我做了一些实验,发现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的string类型的新值添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor部分,并将其赋值为chcp 65001

从此以后,每次打开新的cmd.exe控制台时,都会执行此命令。您甚至可以在新窗口中看到它的输出:“激活代码页:65001.”(或您各自语言中的类似内容)。
哦,顺便说一句:为了在PowerShell中正确显示UTF-8编码的文件,您可以使用Get-Content -encoding UTF8 file.txtcat -encoding UTF8 file.txtcat是PowerShell中Get-Content的别名)。

mu0hgdu0

mu0hgdu02#

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

4uqofj5v3#

我正在Windows 10上的Windows Terminal中通过PowerShell Core v7.0.3使用Git
我一直在浏览答案,并尝试了其中的许多。对我有效的解决方案是:

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

iibxawm4

iibxawm44#

我在Windows 10上使用Git Bash。对我来说,四个设置使外观作为我的期望。

  • env设置。全局添加LC_ALL=C.UTF-8LESSCHARSET=UTF-8PATH
  • git配置git config --global i18n.logOutputEncoding utf-8
  • Git Bash设置。将 * 选项 * → * 文本 * → * 字符集 * 设置为utf-8。或者将localeCharacter set都设置为default。选择正确的encoding是足够聪明的。

好了

2guxujil

2guxujil5#

我不得不使用Windows PowerShell命令提示符,而不是默认的(Windows键+ X)。

bxgwgixi

bxgwgixi6#

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

yeotifhr

yeotifhr7#

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

git config --global core.pager 'more'

相关问题