可是我在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");转换时,半角的字符都是一个字节,全角的同样字符才是两个字节。