问题
如何使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或其配置本身有关。
7条答案
按热度按时间tv6aics11#
好吧,我做了一些实验,发现Windows Git命令实际上需要像
LC_ALL
这样的UNIX变量才能正确显示波兰语(或其他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
的string类型的新值添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
部分,并将其赋值为chcp 65001
。从此以后,每次打开新的cmd.exe控制台时,都会执行此命令。您甚至可以在新窗口中看到它的输出:“激活代码页:65001.”(或您各自语言中的类似内容)。
哦,顺便说一句:为了在PowerShell中正确显示UTF-8编码的文件,您可以使用
Get-Content -encoding UTF8 file.txt
或cat -encoding UTF8 file.txt
(cat
是PowerShell中Get-Content
的别名)。mu0hgdu02#
如果有人对
set LC_ALL=C.UTF-8
的PowerShell等价物感兴趣,那就是:但是,这仅适用于当前会话。要使其永久化,有两种可能性:
LC_ALL
的环境变量,值为C.UTF-8
$env:LC_ALL='C.UTF-8'
放入$Profile
文件中4uqofj5v3#
我正在Windows 10上的Windows Terminal中通过PowerShell Core v7.0.3使用Git。
我一直在浏览答案,并尝试了其中的许多。对我有效的解决方案是:
git config --global core.pager 'less --raw-control-chars'
$env:LC_ALL = 'C.UTF-8'
to the current PowerShell profile这两种解决方案都是单独工作的。我选择使用Git命令,因为问题似乎与Git有关,PowerShell配置文件保持清洁。
iibxawm44#
我在Windows 10上使用Git Bash。对我来说,四个设置使外观作为我的期望。
env
设置。全局添加LC_ALL=C.UTF-8
、LESSCHARSET=UTF-8
到PATH
。git
配置git config --global i18n.logOutputEncoding utf-8
。utf-8
。或者将locale
和Character set
都设置为default
。选择正确的encoding
是足够聪明的。好了
2guxujil5#
我不得不使用Windows PowerShell命令提示符,而不是默认的(Windows键+ X)。
bxgwgixi6#
我在Linux上遇到了这样的问题。问题是我没有生成locale。所以我的
locale
的输出包含所有的“C”字母,没有UTF-8。为了解决这个问题,我在/etc/locale. gen中取消了
en_US.UTF-8
和ru_RU.UTF-8
的注解。然后运行localectlset-localLANG =ru_RU.UTF-8并重新启动。并重新登录到系统。之后西里尔字母显示正常。yeotifhr7#