终端中文乱码:避坑指南
计算机技术 1

终端中文乱码:为什么你的 Git Log 变成了“天书”?

😡 问题现场

你是否在 PowerShell 或 Windows Terminal 中遇到过这种情况?当你兴奋地敲下 git log 或查看脚本输出时,屏幕上并没有出现熟悉的汉字,而是一堆不知所云的“火星文”:

63c1d4a (HEAD -> dev/rename) feat(rename): 涓烘枃浠堕噸鍛藉悕瀵硅瘽妗...
bb85ca9 fix: 淇鎺掔増閿欒 2
ea3688b fix: 淇鎺掔増閿欒

这不仅影响阅读,更让人怀疑是不是自己写了 Bug。其实,这只是简单的字符编码不匹配问题。

🧐 为什么会乱码?

根本原因在于**“鸡同鸭讲”**。

  1. 数据的来源:现在的工具(如 Git、VS Code、Modern Web)大多默认使用 UTF-8 编码来存储中文。
  2. 终端的显示:老旧的 Windows 控制台(CMD/PowerShell)默认使用的可能是 GBK (CP936) 编码。

当 Git 扔给终端一串 UTF-8 的字节流,而终端却强行用 GBK 的规则去“翻译”它时,原本的“修复排版错误”就变成了“淇鎺掔増閿欒”。

✅ 一行代码,完美解决

要解决这个问题,我们需要强制告诉 PowerShell:“请全程使用 UTF-8 说话!

请将以下代码添加到你的 PowerShell 配置文件(Profile)中。

1. 打开配置文件

在终端输入以下命令打开配置:

notepad $PROFILE

(如果提示文件不存在,请先运行 New-Item -Path $PROFILE -Type File -Force)

2. 添加魔法代码

在文件的最顶部加入这行代码:

$OutputEncoding = [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

3. 它是如何工作的?

这行代码其实做了两件事:

  • [Console]::OutputEncoding:告诉控制台窗口,用来显示字符的编码是 UTF-8。
  • $OutputEncoding:告诉 PowerShell 管道系统,程序输出数据时使用的是 UTF-8。

🎉 效果验证

保存文件并重启终端。再次输入 git log,你会发现世界清静了,汉字终于变回了它该有的样子:

63c1d4a (HEAD -> dev/rename) feat(rename): 为文件重命名对话框增加默认选中功能
bb85ca9 fix: 修复排版错误 2

小贴士:如果你还在用老旧的 CMD,建议尽快迁移到 Windows Terminal + PowerShell 7,体验会好很多!

终端中文乱码:避坑指南
https://blog.9991565.xyz/archives/zhong-duan-zhong-wen-luan-ma-bi-keng-zhi-nan
作者
Ayear
发布于
更新于
许可