因为前段时间在mysql和程序中都遇到了字符集编码的问题,对于字符集和字符编码一直没有透彻的了解过。最近专门读了几篇文章进行了了解,记录一下感想和困惑。
1. 字符集和字符编码到底有什么区别?
character-set和character-code
字符集:字符的集合,这个集合限定支持哪些字符。
字符编码:对于该集合中每个字符以什么样的格式进行编码,对应的是一个数值。
2. UNICODE和UTF-8是什么关系?
我们常常会看到UNICODE字符集,UTF-8是一种编码方式
3.UNICODE字符集中的每个字符都有对应的码值, 为什么计算机内不将UNICODE的两字节码值进行直接存储,而又对UNICODE字符集采用各种编码方式?
为了节省空间进行压缩,如英文字符采用UTF-8编码只需要一个字节,但是如果采用UNICODE编码则需要两个字节。另外,为了方便传输(这个我也不清楚方便到什么地方了)。
4. GBK,GB2312,BIG5,UNICODE的区别和联系。
联系:GB2312,GBK,BIG5,UNICODE这四个都是字符集。
区别:GB2312,GBK,BIG5,UNICODE这四个字符集,集合内的字符不同。
GB2312,GBK,BIG5是向上兼容的。但是和UNICODE是不兼容的。
兼容的意思:就是说,GB2312里面有的字符,在GBK中都能找到,GBK只是扩展了字符集。
不兼容的意思:GB2312里面的字符虽然在UNCODE字符集中都能够找到,但是同一个字符的码值不一样。
需要注意的是:UTF-8编码只能对UNICODE进行编码,也就是说如果GB2312要转化为UTF-8编码,必须得先转化为UNICODE编码。
话说:我一直不清楚计算机里面到底存的是那些编码?UNICODE还是UTF-8?
我的理解是实体存的是UTF-8,GBK,GB2312既是一种字符集,同时也是编码方式。