对于常用的编码UTF-8、GBK、GBK2312、Unicode的关系整理
这个问题的引出是因为我发现java中基本数据类型char是占两个字节的,而c语言中char是占用一个字节。要知道编码中文字符的时候往往是2-4个字节,不同编码方式下也会有不同。那么问题来了,java中用的什么编码方式存字符呢?如果是笔画特别多的中文字符如何放到2个字节中?
编码历史
GBK2312是较早出的中文的编码方式,后来GBK收录了GBK2312同时又增加了一些中文字库。而UTF-8是多语言的编码方式,不仅针对中文具有更好的通用性。unicode是UTF之前就提出的,他是对全球所有语言进行统一编码的规范,收录了所有的字符,不过编码空间利用率低。
GBK
GBK编码是1-2个字节,英文是1个字节,中文是2个字节,全角的英文是2个字节。
UTF-8
UTF-8编码是1或3-4个字节,英文是1个字节,中文大都是3个字节,少数是4个字节。
unicode
unicode是很多系统默认文件使用的编码方式,他一般要占用4个字节,英文也是4个字节,大多数中文也是4个字节。如果是及其偏僻的中文就要占6个字节,这样的中文是GBK都没有收录的。
下面我们进行一个测试看看几种编码的占用字节数: