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

C++中u8""与普通""字符串的差异及输出异常问题

问题解析:UTF-8字符串字面量与普通字符串字面量的输出差异

原代码与输出

源代码

std::string utf8_string = u8"你好,世界";
std::string simple_string = "你好,世界";
std::cout << utf8_string.size()<<":" << utf8_string << std::endl;
std::cout << simple_string.size()<<":"<<simple_string << std::endl;

源文件以UTF-8编码保存。

执行输出

15:浣犲ソ锛屼笘鐣
10:你好,世界

差异原因

  • u8"你好,世界"的行为:
    这是C++11引入的UTF-8字符串字面量,编译器会直接将字符串内容编码为UTF-8字节序列。"你好,世界"包含5个UTF-8字符(每个汉字、中文逗号占3字节),总字节数为5×3=15,所以size()返回15。
    输出乱码是因为控制台的编码不是UTF-8(比如Windows默认控制台编码为GBK/CP936),UTF-8字节被控制台按当前编码解析,导致显示异常。

  • "你好,世界"的行为:
    普通字符串字面量的编码规则是:编译器先按源文件编码(UTF-8)读取字符串,再将其转换为执行字符集(多数Windows下的编译器默认执行字符集为GBK/CP936)。每个汉字、中文逗号在GBK中占2字节,总字节数为5×2=10,所以size()返回10。
    此时控制台编码与执行字符集一致,所以能正常显示中文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:58:14