博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中的Unicode编码:wchar, UTF-8,UTF-16,UTF-32
阅读量:4205 次
发布时间:2019-05-26

本文共 989 字,大约阅读时间需要 3 分钟。

C++在C11标准中加入了对Unicode编码的支持,新增了wchar_t、char16_t、char32_t内置数据类型。

cout << sizeof(char) << endl;    cout << sizeof(wchar_t) << endl;    cout << sizeof(char16_t) << endl;    cout << sizeof(char32_t) << endl;

经以上代码测试,这三个数据类型的大小为:1、4、2、4字节(Ubuntu X64环境下);

char:标准ASCII字符,大小为1字节(8bit),可以存储UTF-8编码字符

wchar_t:变宽字符,大小根据操作系统环境而定(据我所知Windows下是2字节(16位),Linux下是4字节(32位))
char16_t:16位长字符,可以存储UTF-16编码字符
char32_t:32位长字符,可以存储UTF-32编码字符

让这些字符表示相应的字符串,则为:

wchar_t wstr[] = L"我是宽字符常量";    char u8str[] = u8"我是UTF-8";    char16_t u16str[] = u"我是UTF16";    char32_t u32str[] = U"我是UTF32";

其中:

L为变宽字符串\字符的前缀
u8为UTF-8编码字符串\字符的前缀
u为UTF-16编码字符串\字符的前缀
U为UTF-32编码字符串\字符的前缀

在标准模板库中也有相应的string实现:

typedef basic_string
string; typedef basic_string
u16string; typedef basic_string
u32string;

实现举例:

wstring wstrr(L"我是宽字符字符串");    string u8strr(u8"我是UTF8");    u16string u16strr(u"我是UTF16");    u32string u32strr(U"我是UTF32");

不过经验证,wstring、u16string、u32string并没有重载 << 、>>等运算符。

转载地址:http://lxoli.baihongyu.com/

你可能感兴趣的文章
13丨性能测试场景:如何进行场景设计
查看>>
14丨性能测试场景:如何理解业务模型
查看>>
Prometheus exporter详解
查看>>
15丨性能测试场景:如何进行监控设计
查看>>
16丨案例:性能监控工具之Grafana-Prometheus-Exporters
查看>>
九度OJ 1085:求root(N, k) (迭代)
查看>>
九度OJ 1086:最小花费 (DP)
查看>>
九度OJ 1087:约数的个数 (数字特性)
查看>>
九度OJ 1088:剩下的树 (线段树)
查看>>
九度OJ 1089:数字反转 (数字反转)
查看>>
九度OJ 1090:路径打印 (树、DFS)
查看>>
九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)
查看>>
九度OJ 1092:Fibonacci (递归)
查看>>
九度OJ 1093:WERTYU (翻译)
查看>>
九度OJ 1094:String Matching(字符串匹配) (计数)
查看>>
九度OJ 1095:2的幂次方 (递归)
查看>>
九度OJ 1471-1480(10/10)
查看>>
九度OJ 1481-1490(7/10)
查看>>
九度OJ 1491-1500(5/10)
查看>>
九度OJ 1501-1510(10/10)
查看>>