You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:23:13