字符集,指的是被分配了整数编号的
字符集合;
但是,编码字符集中字符被分配的整数编号,不一定就是该字符在计算机中存储时所使用的值;
计算机中存储的字符到底使用什么二进制整数值来表示,是由
字符集编码决定的。
字符集编码决定了如何将一个字符的整数编号对应到一个二进制的整数值。
有的编码方案简单的将该整数值直接作为其在计算机中的表示而存储,例如英文字符。
几乎所有的字符集编码方案中,英文字母的整数编号与其在计算机内部存储的二进制形式都一致。
但有的编码方案,例如适用于Unicode字符集的UTF-8编码形式,就将很大一部分字符的整数编号作了变换后存储在计算机中。
以“汉”字为例,“汉”的Unicode值为0x6C49,但其编码为UTF-8格式后的值为0xE6B189(注意到变成了三个字节)。
GB2312最初指的是一个编码字符集,其中包含了ASCII所包含的英文字符,同时加入了6763个简体汉字以及其他一些ASCII之外的符号。GB2312也有自己的编码方案,但这个方案直接使用一个字符在GB2312中的编号作为存储值(与UTF-32的做法类似)。
我们日常说起GB2312的时候,
常常即指这个字符集,也指这种编码方案。
GBK是GB2312的后续标准,添加了更多的汉字和特殊符号,类似的是,GBK也是同时指他的字符集和他的编码。
GBK还是现如今中文Windows操作系统的系统默认编码(这正是几乎所有网页上的,文件里的乱码问题的根源)。
在Java中,字符只以一种编码形式存在,那就是UTF-16。
但“在Java中”到底是指在哪里呢?就是指在JVM中,在内存中,代码里声明的每一个char,String类型的变量中。
Python中既可以按Ascii编码,也可以按unicode编码。