C深入理解编程中的字符编码 c语言中字符串的各种指令( 二 )


UCS-2用2字节编码 , UCS-4用4字节编码(0x0-0xffffffff)(理论上2 ^ 32 = 4294967296) 。
unicode本身只指定对应的二进制数(也是序列号) 。因为需要更多的比特 , 所以发现有些预编码的序列号只需要一个字节或者两个字节 。如果同样使用四个字节 , 会造成空之间的浪费 , 所以可以考虑另一种经济的存储方案 。所以在unicode统一数字编码的基础上 , 开发了一套存储的编码方案 , 就是utf , 在空之间 , 或者空之间交换时间 , 或者折中 , 对应utf-8 , utf-32 , utf-16 , 因为存储的是另一套编码体系 , 需要重新转换 。转换格式为:
utf-8
不同的编码段用不同的字节数(1-6)存储 , 一位用0交换 , 两位段从110和10开始 , 三位段从1110和10 , 10开始 , 四位段从11110和10 , 10 , 10开始 。这样编码在存储前面的字符时就节省了空 , 是用时间换取空的折中方案 。

C深入理解编程中的字符编码 c语言中字符串的各种指令


utf-16
两个字节或四个字节用于存储 , 分为两段 。第一段不经转换直接存储 , 使用两个字节 。如果属于第二段(高段) , 第一个和第二个字节以110110开头 , 第三个和第四个字节以110111开头 , 其余用unicode编码依次填充 。
C深入理解编程中的字符编码 c语言中字符串的各种指令


utf-32:固定长度 , 4个字节存储 , 用空改变时间(因为不需要转换) 。
4 C 使用的字符串在C中 , char用来表示单字节字符 , wchar_t用来表示宽字符 , 这为国际代码提供了一些支持 。Char * strings由特殊的封装类std::string处理 , 标准的iostream是std::cin和std::cout 。对于wchar_t * string , 封装类是std::wstring , 标准iostream是wcin和wcout 。虽然指定了宽字符 , 但是不清楚宽字符占用多少字节 。Windows系统中的宽字符是两个字节 , 是UTF-16; 。在Unix/Linux系统中 , 为了更全面的国际编码支持 , 其宽字符为四个字节 , 即UTF-32编码 。这给程序的跨平台带来了一些困惑 。除了Windows程序开发中常用wchar_t* string表示UTF-16 , 其他情况下很少使用wchar_t* 。MFC通常用自己的TCHAR和CString类支持国际化 。未定义_UNICODE宏时 , TCHAR = char , 定义_UNICODE宏时 , TCHAR = wchar_t , CString内部类似 。Qt使用QChar和QString类(内部常量为UTF-16) , 一般图形开发库使用自己的字符串类库 。在新标准C 11中 , 明确定义了对国际代码的支持:
char *对应UTF-8编码字符串(代码表示为u8 & # 34多种语言& # 34;) , 封装类是STD::string;;
添加char16_t *对应UTF-16编码字符串(代码表示为u & # 34多种语言& # 34;) , 封装类为STD::u 16 string;
添加char32_t *对应UTF-32编码字符串(代码表示为U & # 34多种语言& # 34;) , 封装类是std::u32string 。
因为Qt有打包的QString , 所以不太需要这些新的字符串格式 。
-End-
,

推荐阅读