在 Windows 的 PowerShell / CMD 里执行 git log,中文提交信息变成一堆 <E6><89><93> 十六进制转义,或者变成「涓枃」这样的怪字——这两个现象的根因不同,解法也不同。本文按输出链路逐环排查,一次配好不再复发。

先分清楚:你遇到的是哪种乱码
形态 A:十六进制转义,中文显示为 <E6><89><93> 这种尖括号字节码:
3467ca7 <E6><89><93><E5><8C><85><E8><84><9A><E6><9C><AC>...
形态 B:字符错乱,中文显示为「涓枃」「鎻愪氦」这种能显示但完全对不上的字:
3467ca7 鎵撳寘鑴氭湰榛樿鐗堟湰鍙峰悓姝ヤ负 1.2.0
形态 A 是 pager(less)把 UTF-8 字节当不可打印字符转义了;形态 B 是 控制台代码页用 GBK 误读了 UTF-8 输出。两个问题的修复点不一样,所以网上抄一条命令经常不管用。
根因:Git 输出链路的三个环节
Git 内部固定用 UTF-8 存储提交信息。从存储到你眼睛,中间经过三环:
- Git 自身配置:
core.quotepath(路径转义)、i18n.logoutputencoding(日志输出编码) - Pager(less):
git log默认走 less 分页,less 按LESSCHARSET判断字符集,不认识就转义成<XX> - 控制台代码页:Windows 中文系统默认 GBK(936),UTF-8 输出会被按 GBK 解码
任何一环断了都会乱码。下面按顺序修。
第一步:Git 配置三件套
git config --global core.quotepath false
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
core.quotepath false:中文文件名不再转义(git status里的"\346\226\207\344\273\266.txt"变回正常文件名)i18n.commitencoding utf-8:声明提交信息的编码(写入时不再转码)i18n.logoutputencoding utf-8:日志输出编码固定 UTF-8
第二步:修 pager(形态 A 的直接元凶)
git log 默认通过 less 输出,less 不知道字符集就把非 ASCII 字节显示成 <E6> 这种转义。设置环境变量:
# 当前会话立即生效
$env:LESSCHARSET = "utf-8"
# 永久写入用户环境变量(推荐,重开终端生效)
setx LESSCHARSET utf-8
设完再跑 git log --oneline,形态 A 的转义应该直接消失。如果懒得配 pager,也可以临时绕过:git --no-pager log --oneline 直接输出到终端,不经过 less。
第三步:控制台代码页切 UTF-8(形态 B 的修法)
chcp 65001
65001 是 UTF-8 的代码页编号。PowerShell 下还可以同步设置输出编码,避免管道场景再次乱码:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
注意 chcp 65001 只对当前窗口生效。想永久生效,可以在「区域设置 → 管理 → 更改系统区域设置」勾选 Beta 版:使用 Unicode UTF-8 提供全球语言支持——但这会让一些老国产软件乱码,开发机上自行权衡。
第四步(推荐):换个现代终端
Windows Terminal、VS Code 终端、IDEA 内置终端默认就是 UTF-8,配好第一、二步后基本不会再遇到乱码。老的 conhost(蓝底 PowerShell 窗口)对 UTF-8 支持最差,能换就换。
验证与残留坑
配完后验证:
git log --oneline # 提交信息中文正常
git status # 中文文件名正常
git show <commit> # diff 里的中文内容正常
两个残留坑提醒:
- 老仓库提交本身是 GBK 编码(早期 SVN 迁移或老 Windows 项目):新配置下老提交会反向乱码,此时读取端临时设
git config i18n.logoutputencoding gbk查看,或联系仓库维护者统一转码 - 脚本里解析 git 输出:先
git --no-pager并固定编码,避免 CI 环境 pager 行为不一致
常用的 Git 配置与日志命令可以收藏速查表对照使用:Git 命令速查、Git 日志与提交速查。日常在 Windows 做排查的话,也可以试试我们的 Windows 本地工具箱,端口占用、文件定位等工具离线可用。