Windows 11中文乱码需统一UTF-8编码:一、启用Beta版UTF-8系统支持并重启;二、修改记事本注册表iDefaultEncoding为65001;三、为CMD/PowerShell控制台分别添加CodePage=65001;四、重置系统区域为中文(简体,中国);五、用PowerShell脚本批量转存文件为无BOM UTF-8。

如果您在Windows 11中频繁遇到记事本、CMD、PowerShell或第三方非Unicode程序显示中文乱码的问题,根源往往在于系统默认编码未统一为UTF-8。以下是实现全局文本编码统一的多种可行路径:
一、启用系统级Beta版UTF-8支持
该设置将使Windows对所有非Unicode程序(如传统记事本、CMD、旧版工具)强制采用UTF-8作为默认代码页,从系统底层提升多语言兼容性。此选项影响广泛,需重启生效。
1、按下 Win + I 打开设置应用。
2、进入 时间和语言 → 语言和区域。
3、点击右侧 “相关设置”下的“管理语言设置”。
4、在弹出的“区域”窗口中,切换到 “管理”选项卡。
5、点击 “更改系统区域设置” 按钮。
6、勾选 “Beta版:使用Unicode UTF-8提供全球语言支持”。
7、点击“确定”,按提示 重启计算机。
二、修改记事本默认编码注册表项
此方法仅针对记事本程序本身,通过注册表强制其新建和打开文件时优先以UTF-8解析,不依赖系统区域设置,适用于拒绝启用Beta版的用户。
1、按下 Win + R,输入 regedit 并回车,以标准权限打开注册表编辑器。
2、导航至路径:HKEY_CURRENT_USER\Software\Microsoft\Notepad。
3、在右侧空白处右键 → 新建 → DWORD (32位)值,命名为 iDefaultEncoding。
4、双击该新建项,将 数值数据 设为 65001,基数选择 十进制。
5、关闭注册表编辑器,重启记事本,新打开的无BOM文件将自动按UTF-8解码。
三、为命令行工具单独配置UTF-8代码页
CMD与PowerShell默认使用系统ANSI代码页(如936),导致中文输出乱码。通过注册表为每个终端进程独立指定启动代码页,可精准控制其编码行为,且互不干扰。
1、按下 Win + R,输入 regedit 并回车。
2、导航至路径:HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe。
3、右键右侧空白区 → 新建 → DWORD (32位)值,命名为 CodePage。
4、双击 CodePage,设数值数据为 65001(十进制)。
5、同样操作,导航至路径:HKEY_CURRENT_USER\Console\%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe,创建并配置同名DWORD值。
6、关闭注册表编辑器,重新打开CMD或PowerShell窗口 即生效。
四、重置系统区域设置为中文(简体,中国)
该操作修正非Unicode程序的语言基准,确保GBK/GB2312等中文编码能被正确识别与映射,是解决记事本打开本地生成中文TXT乱码的基础前提。
1、按下 Win + R,输入 intl.cpl 并回车,打开区域设置界面。
2、切换到 “管理”选项卡。
3、点击 “更改系统区域设置”。
4、将 “当前系统区域设置”设为“中文(简体,中国)”。
5、务必 取消勾选“Beta版:使用Unicode UTF-8提供全球语言支持”(若此前已启用,请先取消再执行本步)。
6、点击“确定”,按提示 重启计算机。
五、使用PowerShell脚本批量转换现有文件编码
对于已存在的大量ANSI/GBK编码文本文件,手动逐个另存为UTF-8效率低下。本方案提供可执行的PowerShell逻辑,自动检测并转存为无BOM UTF-8格式,保留原始目录结构。
1、以管理员身份运行 Windows 终端(PowerShell)。
2、执行以下命令设置执行策略(如提示被阻止):Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。
3、将以下脚本粘贴入终端并回车运行(请将 E:\MyFiles 替换为您的目标文件夹路径):
$path = "E:\MyFiles"; $utf8NoBom = New-Object System.Text.UTF8Encoding $false; Get-ChildItem -Path $path -Recurse -Include *.txt,*.log,*.csv | ForEach-Object { $content = [System.IO.File]::ReadAllText($_.FullName, [System.Text.Encoding]::Default); [System.IO.File]::WriteAllText($_.FullName, $content, $utf8NoBom) }
4、脚本运行完成后,所有匹配文件即被转换为UTF-8编码。










