在字符文字中使用unicode字符

时间:2014-09-20 17:39:21

标签: c++ c++11 unicode

正如我们所知,'═'之类的内容会给出一个多字符常量警告。另一种方法是使用0x2550或"\u2550"。但是,后者要求打印功能支持\u转义序列。但是我不想在任何地方使用十六进制。是否有我可以使用的语言结构,当我真正指'='时,我可以写uint32_t c = 0x2550,即'='u

2 个答案:

答案 0 :(得分:1)

\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;
}

输出显示此字符串中只有一个字符。

答案 1 :(得分:1)

  

正如我们所知道的那样,'='会给出一个多字符不断的警告。

没有

  

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

没有

  

但是,后者要求打印功能支持\ u转义序列。

没有

  

但是我不想在任何地方使用十六进制。有没有我可以使用的语言结构,当我真的意思是uint32_t c = 0x2550时,我可以写'═',即'='u。

uint32_t c = L'═';

使用支持该字符的源代码。

对于不在Unicode的基本多语言平面中的字符,它会更加复杂,因为Windows中的wchar_t只有16位,就像在原始Unicode中一样。