Windows PowerShell突然显示怪异字符(含ANSI转义码)求解答
解决Windows PowerShell显示ANSI转义字符的问题
嘿,我之前也碰到过一模一样的情况!那些[39;49m、[32m这类怪异字符其实是ANSI转义序列——它们本来是用来给终端输出添加颜色、格式的标记,但PowerShell没能正确解析,才直接把代码裸显出来了。
常见原因
- 你用的可能是旧版Windows PowerShell(5.1及更早版本):这类版本默认没有启用ANSI转义序列的解析功能,当脚本或CLI工具输出带颜色的ANSI代码时,就会出现这种乱码。
- 工具兼容性问题:有些第三方工具(比如Node.js的CLI、Python脚本)默认会输出ANSI序列,但没检测当前终端是否支持,导致在不兼容的PowerShell环境里失效。
- 配置意外变更:偶尔PowerShell的终端配置被修改,关闭了ANSI支持。
解决办法
1. 临时启用(仅当前会话有效)
在PowerShell中执行以下命令,然后关闭并重新打开PowerShell:
Set-ItemProperty HKCU:\Console VirtualTerminalLevel -Type DWORD 1
2. 永久启用(所有会话生效)
- 按下
Win+R输入regedit打开注册表编辑器 - 导航到路径:
HKEY_CURRENT_USER\Console - 找到或新建名为
VirtualTerminalLevel的DWORD值,将其数据设置为1 - 重启PowerShell后,ANSI序列就能正常渲染成颜色了。
3. 升级到PowerShell 7+(推荐)
新版的PowerShell(原PowerShell Core)默认完全支持ANSI转义序列,还修复了很多旧版的兼容性问题,功能也更丰富,长期使用的话建议直接升级。
4. 针对特定工具关闭颜色输出
如果只是某个工具导致的问题,可以看看该工具是否支持关闭颜色的参数,比如很多CLI工具支持--no-color或--color=never,添加这个参数后就不会输出ANSI序列了。
内容的提问来源于stack exchange,提问作者Ayman Hussein




