引言
因为最近一道算法题说考虑Unicode的情况,才发现平时只是知道这几种编码方式和字符集的名字,并不知道其中的区别和联系
常见的字符集编码有ASCII字符集、ISO-8859字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集
这里是我自己搜索和总结的理解,希望可以对和我一样迷惑的你提供一个参考,文章阅读大概需要五分钟,希望不会浪费你宝贵的时间
正文
ASCII
ASCII 码一共规定了128个字符的编码,包括所有的英文字母和常用的符号,是最早的字符集
ISO-8859-1
ISO-8859-1编码是单字节编码,向下兼容ASCII,包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,作为ASCII的拓展版本
GBK/GB2312/GB18030
世界上众多的国家单单靠ASCII字符集是满足不了的,为了存储中文GBK字符集出现了,为了针对繁体字和各种少数民族文字,这几种字符集就出现了
BIG5
Big5收录的汉字只包括繁体汉字,不包括简体汉字,一些生僻的汉字也没有收录,也就是说Big5收录的字符是GBK收录字符的一部分,但相同字符的编码不同
Unicode
当每个国家都有自己的字符集的时候,统一标准就必须要必须出现了,于是ISO发布了Unicode字符集,包含了世界上所有的字符
Unicode是一个字符集,他也很多编码标准如TUF-8、UTF-16和UTF-32等针对不同的存储方法而存在
UFT-8:一种变长的编码方案,使用 1~6 个字节来存储;
UFT-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。
Unicode存在的问题
我们刚刚知道Unicode是一个字符集,但是如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?
所以他才推出了众多的编码方式通过规定长度来判别他代表的含义
第二个问题是,英文字母只用一个字节表示就够了,但是对于UTF-32这种每个字符四个字节的编码方式的对于存储来说是极大的浪费