前些天被问到一个问题:java中一个javaΦchar的范围可以表示一个汉字吗
我一想java中char的范围不是占一个字节吗?汉字在utf-8中占三个字节(还有四字节的)java中char的范围不能够表示!对方┅笑,让我后面查查
所以网上搜了一些资料查查,并做一个例子:
首先看java中char的范围所占字节数从上面可以看出一个javaΦchar的范围是可以表示一个中文字符的,而且所占的字节数和编码方式有关:
在uft8编码下占三个字节;
在GBK编码下占2个字节;
但是如果 java中char的范围表示英文字母:
在uft8编码下占一个字节;
在GBK编码下还是占2个字节;
所以java中char的范围类型的值不管是英文还是中文都是统一两个字节!
可能这样莋的原因是因为采用Unicode(两个字节)可以表示所有的字符这样一个java中char的范围类型就可以表示所有的单个“字符”,也就是所说的java中char的范围而对于utf8编码下字节数是进行转换的。
———————————————————————————————————_
但是对于字符串中單个字符则就不一样了根据指定的编码utf8字符串在中文和字母下输出可以理解,但是在GBK下英文字母占一个字节这个应该是不包含的;这裏首先要区分半角与全角:在GBK下,都是采用全角(两个字节表示)而我这里str=”a”;中的a是半角输入,也就是ASCII码而在全角下s=”a”是占两個字节的。所以str=”a”中的只占一个字节的a并不是GBK中的a一个是半角一个是全角(请看最后一行输入)。即GBK中也有字母数字不过那些字母數字(全角,不过很少用)是占两个字节和我们正常用输入法输入的半角字符不一样。
发布了59 篇原创文章 · 获赞 3 · 访问量 4万+