1. 基本概念
ASCII:字符集,编码范围0x00-0x7F,共128个字符,单字节编码,最高位为0;
Unicode:字符集,编码范围0x00-0x10FFFF,共预留100多万个字符编码位(也叫:CodePoint,码点),在0x00-0x7F范围内,与ASCII编码值相同;
unicode字符集分为两个编码平面:基本平面BMP(basic multilingual plane),增补平面SP(supplementary plane);
BMP范围:0x0000-0xFFFF,其中BMP里面的0xD800-0xDFFF(共2048个码点)是预留闲置区,不对应任何字符;SP范围:0x10000-0x10FFFF;
Unicode字符集是一个编码序号表,在计算机中存储字符,还需要具体的实现方式:主要有UTF8,UTF16,UTF32;
2. 大小端模式
大小端模式(BE,LE):一个字符所用编码字节的存储顺序;
大端模式big endian:字符所用编码字节,高权重字节存在前面(低地址),低权重字节存在后面(高地址);
小端模式little endian:字符所用编码字节,高权重字节存在后面(高地址),低权重字节存在前面(低地址);
3. UTF8
UTF8:unicode字符集的一种实现方式,变长编码,由1-4个字节组成;
编码方式:
1)单字节,最高位为0,后面7位是对应unicode码点值,与ASCII相同;
2)n个字节(n>1),第一个字节的前n位置1,第n+1位置零,后面字节的前两位置10,剩余空位顺序填充unicode的码点值
4. UTF16
UTF16:unicode字符集的一种实现方式,变长编码,由2或4个字节组成,每两个字节称为一个编码单元;
编码方式:
1)BMP平面的unicode字符,unicode码点范围0x00-0xFFFF,UTF16编码与unicode对应码点值相同,高位补零凑齐两个字节
2)SP平面的unicode字符,unicode码点范围0x10000-0x10FFFFF,利用BMP平面的闲置预留区0xD800-0xDFFF的码点进行代理表示,
将其分为高代理区0xD800-0xDBFF,低代理区0xDC00-0xDFFF,各有1024个码点,共可以表示1024*1024个码点,正好对应SP平面的所有码点,换算方法如下:
高代理区0xD800-0xDBFF:CH=(unicode码点值-0x10000)/0x400+0xD800
低代理区0xDC00-0xDFFF:CL=(unicode码点值-0x10000)%0x400+0xDC00
5. UTF32
UTF32:unicode字符集的一种实现方式,定长编码,由4个字节组成;
编码方式:把unicode字符集对应码点高位补零,填充到4个字节
6. BOM头
BOM:byte order mark,在文件头部的几个字节,标识文件存储结构
UTF8编码文件BOM头:EF BB BF,表示带BOM头的UTF8文件(其实没什么用),
普通的UTF8文件是没有BOM头的,
无论有无BOM头,UTF8文件都是大端存储
UTF16编码文件BOM头:FE FF表示大端模式,FF FE表示小端模式
7. 例子:
1)字符:严,unicode码点:0x4E25,UTF16大端模式编码:4E 25,UTF16小端模式编码:25 4E,UTF8编码:E4 B8 A5
2)字符:𝄞,unicode码点:0x1D11E,UTF16大端模式编码:D8 34 DD 1E,UTF16小端模式编码:34 D8 1E DD,UTF8编码:F0 9D 84 9E
8. 本人做的unicode编解码工具,供参考
https://www.myhomeabc.com/tool/tool.html?toolid=unicode
1664

被折叠的 条评论
为什么被折叠?



