关于GBK中的英文字符占用一个字节还是两个字节的问题

时间:2023-01-11 17:35:52
网上大部分的说法是:GB2312能完美的支持简体中文和英文,一个中文文字占用2个字节,一个英文字母同样占用2个字节。
可是我在windows下或linux下(确认是gbk编码)测试中发现英文字母占用一个字节,这是怎么回事?

例:a你b好,编码是:61 C4 E3 62 BA C3



英文字母是1byte.
lz 如果想感受2byte的字符,可以用全角试一下.


再次确认一下,gbk的26个字母确实是一个字节,utf8的也是一个字节。

只有utf-16占用两个


GB 系列编码是利用了字节中的最高位和ASCII编码区分的。
所以可以和ASCII码混用。


GBK中字符是一个或者两个字节,单字节00–7F这个区间和ASCII是一样的;双字节字符的第一个字节在81-FE之间,通过这个可以判断是单字节还是双字节

GB2312中1区到15区共682个字符或图形符号都是全角方式下的字符。即:
若byte[] bb="hello".getBytes("gb2312");(注意是全角方式下),bb字节数组的长度就会是10了。
因此:gb2312中的所有字符都是用二个字节表示(是因为:它的字符都是全角方式)。gb2312中不会对半角方式下的字符编码的(这是ASCII码的事情),因此:在getBytes("gb2312");转换时,半角的字符都是一个字节,全角的同样字符才是两个字节。