宽字符和编码
GB2312
原始ASCII码范围是0-7F,包括英文字母、阿拉伯数字和标点符号等字符
拓展ASCII码拓展了80-FF
GB2312向下兼容ASCII,每个汉字以两个字节来表示,第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上 0xA0)。
UNICODE
UNICODE是一个字符集,它规定了符号的二进制代码
UTF-32
简单粗暴,直接使用4个字节储存所有字符。
UTF-16
UTF-16是一种变长编码,以16位无符号整数为单位,对于0-FFFF之间的字符,使用2个字节储存,对于10000-10FFFF之间的字符,使用4个字节储存,并且UTF-16没有任何单字节字符,所以并不兼容ASCII。
UTF-8
UTF-8支持单字节,可以向下兼容ASCII码,具体编码方式如下:
| UNICODE编码 | UTF-8字节流 |
|---|---|
| 000000 - 00007F | 0xxxxxxx |
| 000080 - 0007FF | 110xxxxx 10xxxxxx |
| 000800 - 00FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
| 010000 - 10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
如上所诉,由于UTF-16不支持单字节字符,在网络中传输为了节省资源一般使用UTF-8,文件中中文字符多也可以使用UTF-16,解析速度更快。
BOM(Byte Order Mark)
字节顺序标记,插入到UNICODE编码数据开头的特殊标记,表示了数据的编码类型
| 编码 | 二进制数据 |
|---|---|
| UTF-8 | EF BB BF |
| UTF-16LE | FF FE |
| UTF-16Be | FE FF |
UTF-16LE为小端存储,UTF-16Be为大段存储。
在C语言中使用宽字符
1 |
|
署名-非商业性使用本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZEKALRYN'S BLOG!
评论
