编程:C++中UTF-8、UTF-16、UTF-32之间的编码转换
来源:互联网 发布:知乎 马小婷 编辑:程序博客网 时间:2024/05/29 12:34
原:http://blog.csdn.net/jhqin/article/details/5687505
原:http://hxraid.iteye.com/blog/559607
【附2】: UTF-16编码算法
Unicode编码表的专业术语:
代码点 (code point): 指在Unicode编码表中一个字符所对应的代码值。如汉字“一”的代码点是U+4E00,英文字母“A”的代码点是U+0041。
代码单元( code unit): 规定16bits的存储容量就是一个代码单元。
Unicode编码表 分为17个代码级别 (code plane),其中代码点\u0000-\uFFFF为第一级别 ---基本多语言级别 (basic multilingual plane),可以用一个代码单元存储一个代码点。其余16个附加级别 从0x10000-0x10FFFF(需要两个代码单元)。其中需要指出的是在多语言级别中,U+D800-U+DFFF这2048值没有表示任何字符,被称为Unicode的替代区域(surrogate area)。UTF-16正是的运用了这一区域,用2个代码单元(2*16bits)巧妙的表示出20bits代码点的Unicode附加级别。
UTF-16编码算法
假设U是一个代码点,也就是Unicode编码表中一个字符所对应的Unicode值。
(1) 如果U<U+10000,也就是处于Unicode的基本多语言级别中。这样16bits(一个代码单元)就足够表示出字符的Unicode值。
(2) 如果U+10FFFF>U>=U+10000,也就是处于附加级别中。UTF-16用2个16位来表示出了,并且正好将每个16位都控制在替代区域U+D800-U+DFFF 中了,具体操作如下:
分别初始化2个16位无符号的整数 —— W1和W2。其中W1=110110yyyyyyyyyy(0xD800-0xDBFF),W2 = 110111xxxxxxxxxx(0xDC00-OxDFFF)。然后,将U的高10位分配给W1的低10位,将U的低10位分配给W2的低10位。这样就可以将20bits的代码点U拆成两个16bits的代码单元。而且这两个代码点正好落在替代区域U+D800-U+DFFF中。
具体举个例子:代码点U+1D56B(一个整数集的算术符号Z)
0x1D56B= 0001 1101 0101 0110 1011
将0x1D56B的高10位0001 1101 01分配给W1的低10位组合成110110 0001 1101 01=0xD875
将0x1D56B的低10位01 0110 1011分配给W2的低10位组合成110111 01 0110 1011=0xDD6B
这样代码点U+1D56B采用UTF-16编码方式,用2个连续的代码单元U+D875和U+DD68表示出了。
- 编程:C++中UTF-8、UTF-16、UTF-32之间的编码转换
- UTF-8、UTF-16、UTF-32之间的编码转换
- C++:UTF-8、UTF-16、UTF-32之间的编码转换
- C#:UTF-8、UTF-16、UTF-32之间的编码转换
- C++:UTF-8、UTF-16、UTF-32之间的编码转换
- UTF-8、UTF-16、UTF-32编码的相互转换
- UTF-8、UTF-16、UTF-32编码的相互转换
- UNICODE(UTF-16)与UTF-8编码的相互转换
- UNICODE(UTF-16)与UTF-8编码的相互转换
- C++ UTF-8 转换助手 实现UTF-8 和UTF-16之间的转换
- UTF-8编码的转换
- Unicode 编码与UTF-8编码之间的转换
- 字符编码 Unicode UTF-8 UTF-16 UTF-32 ANSI
- 字符集编码之间的转换,UTF-8 转为 GB2312,GB2312 转为 UTF-8 ,Unicode 转换成UTF-8
- 字符集编码之间的转换,UTF-8 转为 GB2312,GB2312 转为 UTF-8 ,Unicode 转换成UTF-8
- Python的编码机制,unicode, utf-8, utf-16, GBK, GB2312,ISO-8859-1 等编码之间的转换。
- Python的编码机制,unicode, utf-8, utf-16, GBK, GB2312,ISO-8859-1 等编码之间的转换
- UTF-8编码转换
- Shell学习笔记(6)-高级变量之变量扩展
- 数据库字段和java类型的对应关系
- map插入对象小结
- IT行业为什么需要更多的女性?
- STM32 FSMC总线深入研究
- 编程:C++中UTF-8、UTF-16、UTF-32之间的编码转换
- web_custom_request 函数
- 微软安全新闻聚焦-双周刊第二十三期
- 判断是否为整数
- Zend Server 错误:The server encountered an internal error or misconfiguration and was unable to comple
- 进制间的转换
- 四大IT运维管理技巧助力网络管理
- web_url函数
- 开发者成功应聘的二十六条建议