chcp 是干什么的
chcp 显示或切换当前控制台的“代码页”,也就是控制台解释字节流时使用的字符集。简体中文 Windows 默认是 936(GBK),而现代工具与跨平台项目普遍输出 UTF-8,于是终端里就出现了方块与乱码。chcp 65001 把当前控制台切到 UTF-8,是处理乱码问题的第一把扳手,但要注意它只影响控制台会话,不改文件本身的编码。
基本信息
| 适用平台 | Windows CMD 与部分终端宿主 |
|---|---|
| 语法 | chcp(查看当前);chcp 65001;chcp 936 |
| 常用值 | 65001 UTF-8、936 简体中文 GBK、437 英文、950 繁体中文 |
| 影响范围 | 仅当前控制台会话,不改变文件与系统编码 |
典型使用场景
- 日志或脚本输出中文乱码:确认打印端与控制台编码是否一致
- 运行跨平台工具:Node、Python、Git 等输出 UTF-8,控制台需切到 65001
- 批处理脚本开头统一编码:避免不同机器默认代码页差异
- 查看旧系统导出文件:GBK 文件在 UTF-8 控制台下必然花屏
- 临时排查:先 chcp 看当前值,快速判断是否编码不匹配
常用示例
常用示例
:: 查看当前代码页
chcp
:: 切到 UTF-8
chcp 65001
:: 切回简体中文 GBK
chcp 936
:: 批处理开头静默切换(>nul 屏蔽输出)
@echo off
chcp 65001 >nul
echo 中文输出测试
:: 查看文件本身编码(PowerShell 侧判断)
powershell -c "Get-Content D:\a.txt -TotalCount 1 -Encoding Byte | Select-Object -First 3"常见代码页对照
| 代码页 | 字符集 | 典型场景 |
|---|---|---|
| 936 | GBK 简体中文 | 中文 Windows 默认值 |
| 65001 | UTF-8 | 跨平台工具与现代日志 |
| 437 | 英文(OEM) | 英文系统默认 |
| 950 | Big5 繁体中文 | 繁体环境 |
| 1200/1201 | UTF-16LE/BE | 文件内部编码,非控制台常用 |
乱码要两端一起看:控制台代码页只是显示端,文件或程序输出的编码才是内容端。只有两端一致才不花屏,所以切完 chcp 仍然乱码时,要去检查源文件或程序的编码设置。
部分老程序直接按 ANSI 写屏幕,即使控制台已切到 UTF-8 也仍然乱码。这类程序需要在自身编码设置里调整,不能指望 chcp 解决全部问题。
chcp 的设置在计划任务、服务与远程会话里不会继承交互窗口的值。无人值守脚本要在开头显式执行 chcp,或改用 PowerShell 处理文本输出。