C++ 在字符文字中使用unicode字符

C++ 在字符文字中使用unicode字符,c++,c++11,unicode,C++,C++11,Unicode,正如我们所知道的那样,'═'将发出多字符常量警告。替代方法是使用0x2550或“\u2550”。但是,后者需要打印功能来支持\u转义序列。但是,我不想在任何地方都使用十六进制。是否有一个语言结构,我可以用它来编写 > ,当我真正的意思是< uTu32 32 t c= 0x2550 < /代码>,即 >‘u < /C> > < < /p> < p> \u>代码>序列被C++编译器解释,而不是由“打印函数”。但是,您需要使用一个宽字符串( STD::WString )以存储字符。例如: #incl

正如我们所知道的那样,
'═'将发出多字符常量警告。替代方法是使用0x2550或
“\u2550”
。但是,后者需要打印功能来支持
\u
转义序列。但是,我不想在任何地方都使用十六进制。是否有一个语言结构,我可以用它来编写<代码> > <代码>,当我真正的意思是< uTu32 32 t c= 0x2550 < /代码>,即<代码> >‘u < /C> > < < /p> < p> <代码> \u>代码>序列被C++编译器解释,而不是由“打印函数”。但是,您需要使用一个宽字符串(<代码> STD::WString )以存储字符。例如:

#include <iostream>
#include <string>

int main() {
    std::wstring s(L"\u2550");

    std::wcout << s.size() << std::endl
               << std::hex << static_cast<int>(s[0]) << std::dec << std::endl
               << s << std::endl;

    return 0;
}
#包括
#包括
int main(){
标准::wstring s(L“\u2550”);
标准::wcout
正如我们所知═' 将发出多字符常量警告

没有

替代方法是使用0x2550或“\u2550”

没有

但是,后者需要打印功能来支持转义序列

没有

但是我不想在任何地方都使用十六进制。是否有一种语言结构可以让我使用它来书写”═' 当我真正的意思是uint32_t c=0x2550时,即'═'美国

使用支持该字符的源编码


但是,对于不在Unicode基本多语言平面中的字符,它需要更多的参与,因为Windows中的
wchar\u t
与原始Unicode中一样,只有16位。

前缀
L
使用
wchar\u t
生成一个文本,因为它在不同的平台上大小不同,所以移植性不强最好使用
char16\u t c=u'═';
char32\U t c=U'═'; U/COD>前缀。您认为便携式的是什么?你认为?哈哈,:“代码> WCARYTT < /代码>对于答案中的限制,即BMP,是非常便携的。这就是为什么许多大型便携式GUI。框架将字符串文本转换为宽字符串。因此,你的两个假设都是错误的:与你认为的
wchar\u t
不太可移植相反,它是可移植的,与你认为的C++11
u
前缀非常可移植相反,它根本不可移植。然而。
uint32_t c = L'═';