按我的理解,GBK是定长字符编码,不管是中文还是英文,都是两个字节。
"a".getBytes("GBK"); //byte数组理论上长度为2,但其实是1
//其它的一些
“中”.getBytes("GBK"); //byte数组长度为2
“中”.getBytes("UTF-8"); //byte数组长度为3
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
国标(GB)系列字符集只是定义了我们汉字的code point,不是具体的实现方式,像gb2312 就有两种常见的实现方式(也就是我们经常说的编码)
EUC-CN
HZ
我们要明确,设计一种编码方案要与之前的编码方案(像 ASCII、ISO-8859-1)兼容,现在大多数多字节编码方案都是变长编码。
对于 gbk 来说,它既是一套字符集也是一种编码方案,而且是种变长编码方案,
0x00–0x7F之间的编码,与 ASCII 保持一致,最高位 0 填充双字节,第一个字节范围
0x81–0xFE,第二个字节范围40–7E或80–FE表示汉字等字符以上回答了题主的问题。
关于这个问题的细节,其实很复杂的多。如果感兴趣,可以静下心来看看我总结的博客
字符串,那些你不知道的事