通过修改注册表实现 cmd 和 PowerShell 默认代码页的修改

Ryan Lu Lv4

前言

在使用 Windows 命令行(cmd)或 PowerShell 时,我们经常遇到中文乱码问题。这通常是因为默认的代码页(Code Page)设置不正确导致的。本文将介绍如何通过修改注册表来永久更改 cmd 和 PowerShell 的默认代码页为 UTF-8(65001),从而彻底解决乱码问题。

什么是代码页?

代码页(Code Page)是字符编码的映射表,用于将字节值映射到特定字符。Windows 系统常用的代码页包括:

代码页编码说明
437OEM United States美国默认 OEM 代码页
936GBK简体中文编码
950Big5繁体中文编码
65001UTF-8Unicode 通用编码

在中文 Windows 系统中,cmd 的默认代码页通常是 GBK(936),这会导致在处理 UTF-8 编码的文件或输出时出现乱码。

方法一:修改注册表(推荐)

1. 修改当前用户的 cmd 代码页

打开注册表编辑器(Win + R 输入 regedit),导航到以下路径:

1
HKEY_CURRENT_USER\Console

在右侧窗格中,右键点击 → 新建 → DWORD (32 位) 值,命名为 CodePage

双击该值,选择十进制,输入 65001,点击确定。

2. 为特定命令行程序设置代码页

如果你只想为特定的命令行程序(如 cmd.exe 或 PowerShell)设置代码页,可以在以下路径创建子项:

1
2
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe

在这些子项中同样创建 CodePage DWORD 值,设置为 65001

3. 注册表文件快速导入

你也可以创建一个 .reg 文件来快速导入设置:

1
2
3
4
5
6
7
8
9
10
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console]
"CodePage"=dword:0000fde9

[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:0000fde9

[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe]
"CodePage"=dword:0000fde9

注意0000fde9 是十六进制表示的 65001。

保存为 set_utf8.reg,双击运行并确认导入即可。

方法二:使用命令行设置(临时)

如果你只需要临时更改代码页,可以在命令行中直接使用 chcp 命令:

1
chcp 65001

或者在 PowerShell 中:

1
2
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
chcp 65001

但这种设置仅在当前会话中有效,关闭窗口后会恢复默认值。

方法三:启用 Windows UTF-8 全局支持(Windows 10 1903+)

Windows 10 1903 及以上版本提供了全局 UTF-8 支持选项:

  1. 打开 控制面板时钟和区域区域
  2. 点击 管理 选项卡
  3. 点击 更改系统区域设置
  4. 勾选 Beta 版:使用 Unicode UTF-8 提供全球语言支持
  5. 重启电脑

警告:此设置可能会影响某些旧版应用程序的兼容性,请谨慎使用。

验证设置

设置完成后,重新打开 cmd 或 PowerShell,输入以下命令验证:

1
chcp

如果显示 Active code page: 65001,则说明设置成功。

你也可以测试中文输出:

1
echo 测试中文显示

PowerShell 配置文件方式

除了注册表,你还可以修改 PowerShell 配置文件来自动设置代码页:

  1. 打开或创建配置文件:

    1
    notepad $PROFILE

  2. 添加以下内容:

    1
    2
    3
    4
    5
    6
    # 设置输出编码为 UTF-8
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
    [Console]::InputEncoding = [System.Text.Encoding]::UTF8

    # 设置代码页
    chcp 65001 | Out-Null

  3. 保存后重启 PowerShell 即可生效。

注意事项

  1. 备份注册表:修改注册表前建议先备份,以防出现问题可以恢复。

  2. 某些程序兼容性:将代码页设置为 UTF-8 后,某些依赖 GBK 编码的旧程序可能出现显示问题。

  3. 管理员权限:如果要为所有用户设置,需要在 HKEY_LOCAL_MACHINE 下修改,这需要管理员权限。

  4. 字体支持:确保命令行字体支持 UTF-8 字符,建议使用 ConsolasCascadia CodeSarasa Gothic(更纱黑体) 等等宽字体。

总结

通过修改注册表设置 cmd 和 PowerShell 的默认代码页为 UTF-8,可以一劳永逸地解决命令行乱码问题。推荐使用方法一的注册表方式,既简单又持久。如果你是开发人员或经常处理多语言文本,强烈建议进行此设置。


参考链接: - Microsoft Docs - 使用 UTF-8 代码页 - Windows 控制台文档

  • Title: 通过修改注册表实现 cmd 和 PowerShell 默认代码页的修改
  • Author: Ryan Lu
  • Created at : 2026-03-15 00:00:00
  • Updated at : 2026-03-15 03:14:18
  • Link: http://ryan-hub.site/7bf64b00727c/
  • License: This work is licensed under CC BY-NC-SA 4.0.