Windows命令提示符下Python/C代码ASCII转义序列显示异常问题咨询
解决Windows命令提示符下ANSI转义序列显示乱码问题
问题原因
默认Windows传统命令提示符(cmd.exe)未开启虚拟终端解析功能,无法识别ANSI转义序列开头的ESC字符(十进制27,八进制表示为\33/\033),会将转义序列作为普通文本直接输出,因此出现乱码现象。
解决方案
方案1:修改系统配置全局开启ANSI支持(永久生效,仅支持Windows 10 1511及以上版本)
- 打开cmd后执行如下命令:
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 /f - 执行完成后重启cmd即可全局生效,所有在cmd中运行的程序都可以正常解析ANSI转义序列。
方案2:代码侧主动开启虚拟终端支持(单程序生效,无需修改系统配置)
Python 实现示例
import ctypes # 调用Windows API开启虚拟终端处理 kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7) # 后续转义序列代码可正常运行 print("12345\33[5D67890")
C语言 实现示例
#include <stdio.h> #include <windows.h> int main() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); DWORD mode = 0; // 获取当前控制台模式 GetConsoleMode(hOut, &mode); // 追加虚拟终端解析支持 mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode(hOut, mode); // 转义序列可正常解析 printf("12345\033[5D67890\n"); return 0; }
方案3:使用默认支持ANSI转义的终端工具
- 可直接使用Windows Terminal、PowerShell 7+、Cmder、ConEmu等终端工具运行代码,无需额外配置即可正常解析ANSI转义序列。
- Windows 10以下版本系统原生cmd不支持ANSI转义序列,必须使用第三方终端工具才能实现对应效果。
内容的提问来源于stack exchange,提问作者erurami
相关产品推荐
相关产品推荐

