ASCII编码:是目前计算机中用得最广泛的字符集及其编码。使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
ISO8859-1:可以表示的是西欧语言。看起来很单一为什么还在使用呢,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用ISO-8859-1编码来表示。 而且在很多协议上,默认使用该编码。
GB2312:它是双字节编码,总的编码范围是A1~E7,其中A1~A9是符号区,总共包含682个符号;B0~F7是汉字区,包含6763个汉字。
GBK:GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。
UTF-16:UTF-16是Unicode的其中一个使用方式。Unicode是java和xml的基础。UTF-16具体定义了Unicode的转化格式,它使用定长的表示方法,既不论什么字符都可以用两个字节来表示。两个字节就是16个bit,所以叫做UTF-16。UTF-16表示字符非常方便,每两个字节表示一个字符,这就大大简化了字符串的操作,这也是java以UTF-16作为内存的字符存储格式的很重要的原因。
UTF-8:UTF-16统一采用两个字节来表示一个字符,虽然在表示上非常简单!方便!但是也有缺点。有很大一部分字符用一个字节就可以表示的,但是现在用两个字节表示,存储放大一倍!网络带宽有多利用了一倍。所以就有了UTF-8,它是一种变长的技术,每个编码区域有不同的字码长度。不同的字符可以有1~6个字节来组成。
如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。
如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节