一、几种编码方式说明
1、ISO8859-1
是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用附加符号的拉丁字母语言使用。属于单字节编码,应用于英文。
2、ASCII
单字节编码,只用了7位,最高位为0,能表示128个字符,主要用于英文。
3、Unicode
为了将所有语言统一到一套编码之中,Unicode(万国码、国际码、統一码、单一码)应运而生。Unicode最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节,属于定长编码)。对于Unicode,需要注意的是,Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。因此,就存在2个问题:
一、计算机怎么知道二个字节为一个字符,如何识别二个字节为什么一个字符?
二、针对英文字符,如果使用大于1个字节来表示,那么低位的前面几个字节全是0。很奢侈浪费空间,因为现在计算机大部分内容还是英文。
4、UTF
UTF(Unicode Transformation Format), Unicode字符集的编码方式,主要有UTF-8,UTF-16,UTF-32等。
UTF-8是变长编码,使用1~4个字节来表示一个字符,UTF-8的特点是对不同范围的字符使用不同长度的编码。
UTF-16是以二字节或四字节表示一个字符的变长编码。Unicode在BMP平面的字符(U+0000~U+FFFF)用二字节来编码,其余字符用四字节来编码。
UTF-32是以4个字节表示一个字符的定长编码方式。
5、GBK/GB2312
采用双字节编码,专门用于汉字,而对于英文字母和iso8859-1一致(兼容iso8859-1编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字(big5可以用来表示繁体字),gbk是兼容gb2312编码的。注意GB2312/GBK不是定长编码。
6、UCS
通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。
二、Unicode和UTF-8、UTF-16、UTF-32之间的关系
1、字符集和字符编码
字符集就是我们用十进制来表示世界上各种字符
字符编码就是通将十进制转换为计算机识别的二进制编码的规则
2、Unicode就是一套字符集,该套字符集将世界上大多数语言的文字对对应成10进制数了。为了克服Unicode的缺点,不能直接使用Unicode的方式编码存储到计算机之中。因此,需要使用UTF-8、UTF-16、UTF-32编码方式将Unicode字符集存储到计算机之中。目前,UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。
==》主要参考以下文章:
https://blog.youkuaiyun.com/kdc18333608478/article/details/70214493
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
https://juejin.im/entry/59434c3161ff4b006cd280a1
https://www.zhihu.com/question/23374078