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

Visual Studio 2019使用C++无法正确打印无穷大符号∞的问题求解

C++ Windows平台正确打印无穷大符号∞的解决方案
  • 你遇到的乱码、报错本质是Windows控制台默认使用CP1252/GBK编码,不支持UTF-8编码的∞字符,同时存在编码设置时机错误、宽窄字符输出混用、源文件编码不匹配三类问题。
  • 警告C4566明确提示当前编译器代码页(1252)无法表示Unicode字符\u221E,C2664错误与输出∞无关,属于代码其他位置的内存操作问题,修复编码问题后可进一步排查。

方案1:修改控制台输出代码页为UTF-8(推荐)

这是最省心的方案,不需要改动原有打印逻辑:

  1. 程序启动第一时间调用Windows API设置控制台输出代码页为65001(UTF-8对应代码页)
  2. 将所有.cpp源文件保存为UTF-8编码格式(VS可通过「文件→高级保存选项」设置)
  3. 如果你使用自定义封装的打印函数,只要函数底层输出的是UTF-8编码字符串,设置完代码页后直接传入∞即可正常显示。

示例代码:

#include <windows.h>
#include <cstdio>

// 输出逻辑示例
void print_buff() {
    printf("modifies strength by 9 ∞\n");
}

int main() {
    // 所有输出操作执行前先设置代码页
    SetConsoleOutputCP(CP_UTF8);
    print_buff();
    return 0;
}

方案2:使用宽字符输出

如果不想修改全局代码页,可使用宽字符输出实现,注意不能混用宽字符输出和普通窄字符输出,会导致缓冲区异常:
示例代码:

#include <cstdio>
#include <locale.h>

int main() {
    // Windows下UTF-8区域参数为".UTF-8",不是Linux的en_US.UTF-8
    setlocale(LC_ALL, ".UTF-8");
    // 两种写法都可以
    wprintf(L"modifies strength by 9 %lc\n", 8734);
    // wprintf(L"modifies strength by 9 ∞\n");
    return 0;
}

std::cout输出写法

如果使用C++标准库流输出,需要给流注入UTF-8区域:

#include <iostream>
#include <locale>
#include <windows.h>

int main() {
    SetConsoleOutputCP(CP_UTF8);
    std::cout.imbue(std::locale(".UTF-8"));
    std::cout << "modifies strength by 9 ∞" << std::endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者Bishop Minter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:36:03