C++中ANSI转义码无法为文本着色的问题求助
解决Windows下C++程序ANSI转义码无法着色的问题
你的问题出在Windows默认命令提示符(CMD)默认不支持ANSI转义序列,导致转义码被直接输出而不是解析成颜色。下面是几种可行的解决方式:
方法1:在代码中启用虚拟终端模式
通过调用Windows API修改控制台模式,开启ANSI转义序列支持。修改后的代码如下:
#include <iostream> #include <windows.h> int main() { // 获取标准输出句柄 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hOut == INVALID_HANDLE_VALUE) { return 1; } // 获取当前控制台模式 DWORD dwMode = 0; if (!GetConsoleMode(hOut, &dwMode)) { return 1; } // 启用虚拟终端处理 dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; if (!SetConsoleMode(hOut, dwMode)) { return 1; } // 现在可以正常使用ANSI转义码了 std::cout << "\033[31m红色文本\033[0m\n"; std::cout << "\033[1;31m加粗红色文本\033[0m\n"; return 0; }
编译时需要链接kernel32.lib,g++命令为:
g++ your_code.cpp -o a.exe -lkernel32
方法2:使用Windows原生控制台颜色API
如果不想依赖ANSI转义码,可以直接调用Windows的SetConsoleTextAttribute函数设置颜色:
#include <iostream> #include <windows.h> int main() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hOut == INVALID_HANDLE_VALUE) { return 1; } // 设置红色文本 SetConsoleTextAttribute(hOut, FOREGROUND_RED); std::cout << "红色文本\n"; // 设置加粗红色(FOREGROUND_INTENSITY表示高亮) SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY); std::cout << "加粗红色文本\n"; // 恢复默认颜色 SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); return 0; }
同样需要链接kernel32.lib编译。
方法3:使用支持ANSI的终端
如果你不想修改代码,可以改用Windows Terminal、PowerShell 7+或者Git Bash这类原生支持ANSI转义序列的终端运行程序,它们默认就能解析ANSI颜色码。
内容的提问来源于stack exchange,提问作者SimpfeyIsDumb
相关产品推荐
相关产品推荐

