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

C++20的R字符串如何表示\unnnn格式通用字符名如欧元符号

根本原因

C++的**原始字符串字面量(Raw string literal)**的设计目的就是完全忽略所有转义规则,所有在R"(分隔符...分隔符)"包裹内的字符都会被当做字面字符直接保留,不会做任何转义解析:

  • 普通转义序列如\n、\t不会被解析为换行、制表符
  • 通用字符名\uXXXX、\UXXXXXXXX同样不会被解析为对应Unicode字符
    你提供的代码里\u20AC会被直接输出为\u20AC这6个连续字符,自然看不到欧元符号。

解决方案

根据使用场景可以选以下任意一种方案:

  • 直接在原始字符串中写入欧元符号字符:只要你的源码保存为UTF-8编码,C++20编译器会正常识别该字符,写法为cout << R"(12.5 €)";,注意同时确保你的运行终端编码为UTF-8,避免显示乱码。
  • 通用字符名放在普通字符串字面量中,和原始字符串拼接:如果必须保留\u20AC的写法,可以把需要解析通用字符名的部分放在普通双引号内,和原始字符串做编译期拼接,示例:
cout << "12.5 \u20AC" R"( 后续不需要转义的原始内容)";
  • 明确使用UTF-8字符串适配输出:如果是跨平台场景,可以明确指定UTF-8字符串字面量,Windows平台可额外设置控制台编码为UTF-8保证显示正常:
#include <iostream>
#include <windows.h> // 仅Windows平台需要

using namespace std;

int main()
{
    // 仅Windows平台需要加这行设置输出编码为UTF-8
    SetConsoleOutputCP(CP_UTF8);
    cout << u8R"(12.5 €)";
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:05