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

在C++ fmt库中显示Unicode无穷符号U+221E的异常问题

问题解决:Windows下fmt库无法显示∞符号的问题

核心结论

不要切换到「Use Multi-Byte Character Set」,保持「Use Unicode Character Set」即可,问题出在源码文件编码和控制台输出编码的适配,按以下步骤修复:


1. 消除C4566警告(源码编码问题)

警告提示\u221E无法在当前代码页1252表示,是因为你的源码文件默认用了西欧编码(1252),无法保存UTF-8字符∞。修复步骤:

  • 右键VS项目 → 属性 → 配置属性 → C/C++ → 高级
  • 将「编码」设置为「UTF-8 带签名」(或「UTF-8 不带签名」,带签名更易被VS识别)
  • 保存设置后重新编译,警告会消失

2. 修复控制台输出为?的问题

Windows控制台默认使用GBK(代码页936),无法正确显示UTF-8编码的∞符号,需要强制控制台使用UTF-8输出:

  • 在代码开头添加Windows API调用,设置控制台输出编码:
    #include <windows.h>
    // ...
    SetConsoleOutputCP(CP_UTF8);
    
  • 完整示例代码:
    #include <fmt/core.h>
    #include <fmt/color.h>
    #include <windows.h>
    
    int main() {
        SetConsoleOutputCP(CP_UTF8);
        fmt::print(fmt::styled("∞ >", fmt::emphasis::bold | fg(fmt::color::aquamarine)));
        return 0;
    }
    

3. 为什么不用setlocale?

setlocale(LC_ALL, "en_US.UTF-8")在Windows下对控制台的支持有限,因为C标准库的locale和Windows原生控制台编码机制不兼容,直接调用SetConsoleOutputCP是更可靠的方案。


内容的提问来源于stack exchange,提问作者Alix Blaine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:10:11