今天对字符集的相关知识做一下笔记。

常见的字符集如下所示

ASCII -->ISO 8859-1 -->Unicode -->UTF8/UTF16

                                  -->gb2312 -->GBK -->GB18030

                                  -->BIG5

ASCII

编码最古老,128个字符包括拉丁字母,数字,常用标点符号及控制符,每个控制符一个字节。

ISO 8859-1

ASCII每个编码占一个字节,共128字节,ISO 8859编码利用了剩下的128字节。ISO 8859共有15个子集,其中ISO 8859-1利用这128字节添加了对西欧语言的支持,每个控制符一个字节。

Unicode/UTF8/UTF16

Unicode是目前国际统一的字符编码标准,分为U+0000到U+10FFFF的17个平面,每个平面包含65536个码位,即每个码位需要两个字节,即0x0000到0xFFFF。其中,第一个平面基本多语言平面(Basic multi-language plane,BMP),也是最常用的平面,剩下的16个平面为辅助平面。unicode只规定了字符的码位,实际使用中,还需要使用UTF-8,UTF-16等编码转为实际的字节序列:

UTF-8兼容常见的ASCII编码,意味着对于只包含ACSII编码的文件,UTF-8和ASCII的编码在二进制上是一致的,这在对于以ASCII为标准的互联网标准来说,不需要更改很多,所以得到广泛的应用,是互联网上最常用的unicode编码方式。这是一种变长的编码方式,每个字符需要用一到四个字节表示:

freessh 字符集 字符集大全_freessh 字符集

1)128个ACSII字符只需要一个字节表示,U+0000到U+007F

2)带有附加符号的拉丁文、希腊文等需要两个字节表示,U+0080到U+07FF

3)  BMP中其他的字符,需要三个字节表示,U+0800到U+D7FF以及U+E000到U+FFFF(注意U+DC00到U+DFFF是不对应任何字符的,保留给UTF-16编码使用)

4)辅助平面的字符需要四个字节表示

 

UTF16是另一种常见的unicode编码方式,主要解决UTF-8中编码字符是变长的问题。比如UTF8编码对于编程语言的字符串很难实现。

freessh 字符集 字符集大全_编码方式_02

1) BMP中的字符,需要两个字节表示,U+0000到U+D7FF以及U+E000到U+FFFF(注意U+DC00到U+DFFF是不对应任何字符的)

2)辅助平面中的字符,需要四个字节表示,U+xx0000到U+xxFFFF,其中xx表示01到10的16个平面。BMP中U+DC00到U+DFFF是不对应任何字符的,辅助平面在编码时,码位要减去0x10000, 得到的值的范围为20比特长的0..0xFFFFF。高位的10比特的值被加上0xD800得到第一个码元或称作高位代理(high surrogate)或前导代理(lead surrogates), 值的范围是0xD800..0xDBFF。低位的10比特的值(值的范围也是0..0x3FF)被加上0xDC00得到第二个码元或称作低位代理(low surrogate)或后尾代理(trail surrogates), 现在值的范围是0xDC00..0xDFFF。

GB2312

大陆最早的简体中文字符集,一个汉字字符对应两个字节,与unicode完全不兼容

GBK

在GB2312的基础上,支持繁体中文

GB18030

在GBK基础上,支持藏文,维吾尔文等

BIG5

台湾使用的繁体中文编码,与GB系列完全不兼容