ISO-8899-1,GBK,UTF等字符编码的历史演进

ASCII(American Standard Code for Information Interchange)美国信息交换标准代码。 早期使用,7bit表示一个字符,还有1bit没用,共计可表示128种,表示英文足够。

ISO-8859-1:早期是ascii码,但后来不够用了,于是在ascii码的基础上有了ISO-8859-1,iso8859-1是完全向下兼容ascii码。iso-8859-1,用完整的一个字节(8位)表示一个字符,不会出现位的丢失。共计可表示256个字符。

GB2312:后来有了中文,256个不够用,于是有了gb2312,用两个字节表示一个汉字,每个汉字有个特定的编码与之对应。GBK(国标扩):但因为汉字中的生僻字,于是有了gbk,是gb2312的超集。           

GB18030:后来又不够了,有了gb18030,最完整的简体中文表现形式。而对于台湾,繁体中文,又有big5。因此对于n多的国家,为了不乱套(每个国家都自己定义字符集编码),出现了国际标准unicode

UNICODE:能支持所有的国家的字符,采用两个字节表示一个字符。新的问题:存储的容量需求太多,因为对于使用英文的国家,使用一个字节就能表示,因此需要用0填充高位字节,凑成2个字节,造成存储空间浪费。这种编码方式不适合存储。

UTF(8、16、32)Unicode Translation Format:因为unicode的问题,出现了utf-x。unicode本身是一种编码方式,utf本身是一种存储方式,utf-8是unicode的实现方式之一。UTF-16LE(little endian)小端,UTF-16BE(big endian)大段,在unicode的规范中,对于磁盘的文件,在文件最前面会加上一个不可见的字符,全称为Zero Width No-Break Space(0宽度不换行空格),本身是不存在的,会有一个相应字符编码:0xFEFF,如果在文件开头出现这个,这种文件称为BE,如果是0xFFFE,则称为LE,既在文件开始加上这么一个,表示大端或是小端。

UTF-8,变长字节表示形式,针对不同的字符,用来表示的字节是不一样的,如:英文A,则用1个字节表示,等似和ASCII一样,对于中文,一般会用三个字节表示一个中文。最多会用6个字节表示一个字符。针对utf-8,有个BOM(Byte Order Mark)标识,像0xFEFF,在windows系统中,存储文件时会带上这个BOM头,对于无法解析这个字符的系统,就会出错。

猜你喜欢

转载自blog.csdn.net/u010530712/article/details/82020901