按我的理解,GBK是定长字符编码,不管是中文还是英文,都是两个字节。
"a".getBytes("GBK"); //byte数组理论上长度为2,但其实是1
//其它的一些
“中”.getBytes("GBK"); //byte数组长度为2
“中”.getBytes("UTF-8"); //byte数组长度为3
按我的理解,GBK是定长字符编码,不管是中文还是英文,都是两个字节。
"a".getBytes("GBK"); //byte数组理论上长度为2,但其实是1
//其它的一些
“中”.getBytes("GBK"); //byte数组长度为2
“中”.getBytes("UTF-8"); //byte数组长度为3
国标(GB)系列字符集只是定义了我们汉字的code point,不是具体的实现方式,像gb2312 就有两种常见的实现方式(也就是我们经常说的编码)
我们要明确,设计一种编码方案要与之前的编码方案(像 ASCII、ISO-8859-1)兼容,现在大多数多字节编码方案都是变长编码。
对于 gbk 来说,它既是一套字符集也是一种编码方案,而且是种变长编码方案,
0x00
–0x7F
之间的编码,与 ASCII 保持一致,最高位 0 填充
双字节,第一个字节范围0x81
–0xFE
,第二个字节范围40
–7E
或80
–FE
表示汉字等字符
以上回答了题主的问题。
关于这个问题的细节,其实很复杂的多。如果感兴趣,可以静下心来看看我总结的博客
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
无论GBK、UTF-8,都是对ASCII的扩展,都是"兼容"ASCII的,a是ASCII字符表里的,就一个Byte,值为97,什么编码都是这个,毫无疑问。
请参考:
http://dengo.org/archives/901
摘录:
另外,摘录百度百科:
另外,一个很明显的体验就是:
无论GBK还是UTF-8、ASCII,英文和数字都是不会乱码的,So……
Update:
好吧,有人在评论里表示不信。。。我也是没办法。。。
其实我也是刚才百度了才确认的,就是1个字节,不用怀疑!
举个例子好了:
新建空白的UTF-8的txt文件,可以看到是3个字节(有一个UTF-8 BOM头的字符)。
写10个数字进去,可以看到是13个字节。。。。
不多解释了。。。你们不信的话,就自己慢慢百度、慢慢实验吧233333