字符的编码解码

目录

1、Unicode编码

2、Unicode码在计算机中的存储方式

2.1 UTF-32存储方式

2.2 UTF-8存储方式

2.3 UTF-16存储方式

3、字符编码方式的特点

4、UTF-8与汉字编码

5、字符的边界与文件的随机读取

6、字符编码的容错性

7、参考文章


字符的Unicode编码与存储实现(UTF-8、UTF-16、UTF-32)

1、Unicode编码

一套对字符的编码规则,通过一个编号可以查找到对应的字符。

2、Unicode码在计算机中的存储方式

2.1 UTF-32存储方式

用4个字节存储一个字符的编码信息。可直接将Unicode编码转化为二进制整数进行存储,使用简单方便。一般编码与编号存在一定的偏移量,比如编码0表示编号1,那么编码转编号需要加1。

2.2 UTF-8存储方式

在最高位用1的个数表示需要占用的字符数,其后紧跟一个0作为分隔,1010  0001表示占用1个字符,编码为10  0001。

2.3 UTF-16存储方式

一般用2个字节进行编码,总的编码量为2^16(约6万多),实际字符数量远多于这个数量级。大于2^16编码的处理方式:以4个字节进行编码,第一个字节的开头固定为1101  10yy,2字节编码方式中同样开头的编码没有安排对应的字符。第三个字节的开头固定为1101  11xx,2字节编码方式中同样开头的编码没有安排对应的字符。

3、字符编码方式的特点

UTF-32     编码解码规则简单,一般高位都为0,浪费了存储空间,对于英文字符前3个字节都是存的0。

UTF-8        编码灵活性搞,能够兼容各种文字的编解码,对于英文字符一般只占用一个字节,存储效率也高,英语国家对UTF-8的编码方式接受度很高。因为互联网的普及,不同的编码方式会导致乱码,目前普遍采用UTF-8进行编码。

UTF-16     编解码规则较为复杂,对于2个字节编码的符号,存储效率较高。

4、UTF-8与汉字编码

汉字的编码效率,如果不考虑兼容性,仅仅考虑编码的效率。常用汉字及英文用2个字节,即2^16可以全部包括。采用UTF-8的拜编码方式,许多汉字需要使用3个字节来编码,存储效率是降低的。

5、字符的边界与文件的随机读取

UTF-8编码的文件,在进行随机读写的时候,定位到某一个字节,往前查找最多3个字节,即可以确定字符的边界。

UTF-32编码的文件,进行随机读写,定位到某一个字节,需要知道当前总字节数除以4的余数,因为字节是有地址编号的,可以使用当前编号减去文件开头的字节编号,计算总的字节数,这样可以避免从文件头开始进行遍历计数。有了总的字节数便可以方便的确定字符的边界。

6、字符编码的容错性

UTF-8中3个字节的编码形式

110X XXXX  10XX XXXX  10XX XXXX

第二、三个字节采用10开头是为了容错性,假如第一个字节发生编码错误,造成信息缺失,后2个字节可以作为独立的单元进行处理,这样仅仅3个字节处理错误,不会影响到后续的字节处理。

7、参考文章

字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼)

https://blog.csdn.net/guxiaonuan/article/details/78678043

字符编码笔记:ASCII,Unicode 和 UTF-8

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

刨根究底字符编码之十四——UTF-16究竟是怎么编码的

https://www.cnblogs.com/benbenalin/p/7152570.html

你可能感兴趣的:(计算机基础)