字符编码的历史总结,UTF8的编码规则,文件BOM的由来,笔记

来源:互联网 发布:单片机usb3.3v接哪里 编辑:程序博客网 时间:2024/05/15 06:37

要将文字用计算机存储起来,就必须将每个文字和一个对应的二进制码建立映射关系,下面就是文字编码的演变历史的简单总结,推荐原文 utf8编码原理详解 http://blog.csdn.net/baixiaoshi/article/details/40786503


历史如下:

(1)用0-127码段(一个字节的低位)表示英语的文字和常用符号,称为ANSI 的”Ascii”编码(American Standard Code for Information Interchange,美国信息互换标准代码);
(2)使用128-255码段(一个字节的高位)表示新增的其它字符,称为”扩展字符集”;
(3)中国人使用双字节(每个字节都规定在A1~FE范围[都大于127,若小于127则使用Ascii规则])表示7000多个简体字,称为”GB2312”,是对 ASCII 的中文扩展;
(4)中国人使用双字节(第一个字节大于127,第二个字节随意)拓展了中文的编码范畴,称为GBK编码(已经包含了GB2312的所有内容,外增加了20000多个简繁字体);
(5)中国人再次增加了少数民族字体,将GBK 扩成了 GB18030;
(6)中国人将双字节表示字符的规则称为DBSC(Double Byte Charecter Set 双字节字符集);
(7)很多国家都像中国一样制定了自己国家的文字编码;
(8) ISO (国际标谁化组织)废弃了地区编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码,叫它”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “UNICODE”。
(9)UNICODE统一用两个字节表示一个字符,称作“USC-2”;
(10)UNICODE还可以进行拓展,用四个字节表示一个字符,称作“USC-4”;
(11)互联网兴起,UNICODE为了适应网络传输,出现了面向传输的众多 UTF(UCS Transfer Format)标准,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到 UTF时并不是直接的对应,而是要过一些算法和规则来转换。


历史讲完了,我们再看一下UTF8的编码规则:

(1)将一个编码转为二进制,例如”汉”字的Unicode编码是0x6C49,二进制为:0110 1100 0100 1001;
(2)utf8的模板规则:1…10X..X 10XXXXXX 10XXXXXX,第一个字节的1的个数表示需要用到几个字节表示;
(3)因为是16位有效二进制数据,所以将其填充进模板就是:11100110 10110001 10001001;


文件BOM标志的由来:

为了识别文件的编码格式,以及判断大小端,USC就在文件开头添加了看不见的字符”ZERO WIDTH NO-BREAK SPACE”,俗称BOM,而各编码的BOM如下:

EF BB BF UTF-8FE FF UTF-16/UCS-2, little endianFF FE UTF-16/UCS-2, big endianFF FE 00 00 UTF-32/UCS-4, little endian.00 00 FE FF UTF-32/UCS-4, big-endian.
1 0