在VS2015上,实验结果表明:


 (1)char16_t


 一个char16_t只能保存2字节,所以只能用0000~ffff范围内的字符对其进行初始化或赋值,使用比0000 ffff大的编码,直接报错


 二进制打印出char16_t的值,严格等于utf16编码,在这个范围内,也就是严格等于unicode编码


 (2)u16string


 复制一个unicode字符构造一个unicode字符串,用来初始化u16string:


 u16string ss(u"X");


 如果X在0000~ffff范围内,最终ss会包含两个char16_t,ss[0]严格等于X的unicode编码,ss[1]为终结符001C


 如果X在ffff以上的范围内,最终ss会包含两个char16_t,严格等于上面UTF-16编码转换后的4字节


 

 


 char32_t&u32string


 u32string是按照UTF32编码来保存字符的,也就是完全和unicode编码一一对应,,每个字符用32bits来保存


 (1)char32_t


 一个char32_t四个字节,可以保存所有的unicode字符。但是要注意初始化时,字符常量前要用U


 (2)u32string


 对于u32string ss(U“你”); ss有两个元素,ss[0]为"你"的unicode编码,ss[1]为0000001c