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

如何在C++中正确打印字符'Ø'和'𐌟'?

解决C++中wchar_t与cout打印Unicode字符乱码问题

问题本质

  • 终端编码不匹配:cout默认采用系统本地窄字符编码(Windows多为GBK,Linux/macOS多为UTF-8),直接输出Ø、𐌟这类Unicode字符时,字符的UTF-8编码和终端期望的编码不兼容,导致乱码。
  • wchar_t输出警告+乱码:cout是窄字符流,没有对应wchar_t的输出重载,强行输出会触发类型转换警告;同时宽字符转窄字符时编码转换错误,最终乱码效果和直接输出字符串一致。

解决方案

Windows系统

  • 使用wcout替代cout,同时设置控制台编码为UTF-8或UTF-16:
    #include <iostream>
    #include <windows.h>
    
    int main() {
        // 将控制台输出编码设为UTF-8,直接用cout输出UTF-8字符串
        SetConsoleOutputCP(CP_UTF8);
        std::cout << "Ø" << "  " << "𐌟" << std::endl;
    
        // 也可使用宽字符流输出,编码设为UTF-16
        // SetConsoleOutputCP(CP_UNICODE);
        // std::wcout << L"Ø" << L"  " << L"𐌟" << std::endl;
        return 0;
    }
    
  • 额外注意:Windows默认控制台字体可能不支持𐌟这类特殊字符,需要切换到Consolas、Segoe UI Symbol这类支持Unicode的字体。

Linux/macOS系统

  • 确保终端编码为UTF-8(一般默认就是),直接用cout输出即可,或配合本地化设置处理宽字符:
    #include <iostream>
    #include <locale>
    
    int main() {
        // 加载系统默认本地化,适配宽字符输出
        std::locale::global(std::locale(""));
        std::cout << "Ø" << "  " << "𐌟" << std::endl;
    
        // 宽字符输出方式
        // std::wcout.imbue(std::locale(""));
        // std::wcout << L"Ø" << L"  " << L"𐌟" << std::endl;
        return 0;
    }
    

通用提醒

  • 源代码文件必须保存为UTF-8编码(带不带BOM根据编译器要求调整),否则编译器读取字符时会出现编码错误。
  • 像𐌟这种超出基本多语言平面的字符,需确保终端字体支持该字符集,否则即使编码正确也会显示方块或乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:05:18