byte[] bb="hello".getBytes("gb2312");
System.out.println("bb.length:::"+bb.length);
for(byte bb1:bb)
System.out.println((char)bb1);
运行代码得到如下结果:
bb.length:::5
h
e
l
l
o
我查了一些资料,都说gb2312中的所有字符都是用二个字节表示。如果是这样,那我上面的程序中bb字节数组的长度应该是10啊
可结果却是却是5.我想请问gb2312中的英文字母符号到底是用几个字节表示啊?
System.out.println("bb.length:::"+bb.length);
for(byte bb1:bb)
System.out.println((char)bb1);
运行代码得到如下结果:
bb.length:::5
h
e
l
l
o
我查了一些资料,都说gb2312中的所有字符都是用二个字节表示。如果是这样,那我上面的程序中bb字节数组的长度应该是10啊
可结果却是却是5.我想请问gb2312中的英文字母符号到底是用几个字节表示啊?
解决方案 »
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- java 关于解压rar文件 代码有点问题 帮改正--请进
- 如何用JAVA画一个菱形
- 如何实现数组Array和列表List之间的转换?
- 请教高手HashMap迭代比较
- java语言如何实现WMI访问远程主机?
- 如何追加写文件??
- 请教一个对象内存释放的问题:一个数据集对象rowset在使用完后,使用rowset.close()方法还是使用rowset.close();rowset=null;方法?这两
- list()与listFiles()区别?
- 求救:applet通过数字签名如何执行本机的程序?
- JAVA 处理大图片(jpeg) 内存溢出的问题!100分
- 新手,如何入门Java?
所以是5个
可以测试一下
String s="a";
byte []b=s.getBytes();
for(byte i:b)
System.out.println(i);
String ss=new String(b,"gb2312");
System.out.println(ss);输出结果:
97
a你可以换成汉字,编码方式换成utf-8等试一下就知道了。
所有的简体中文的汉字,被编码成两个字节。并且,汉字编码的两个字节,他们的第一个bite值都为1.
ASCII 英文一个字节
gb2312,gbk 中文两个字节,英文一个字节
在中文系统中ansi一般指gb2312或gbk
GB2312、GBK都属于双字节字符集 (DBCS)
Utf-8 中文三个字节,英文一个字节
Unicode 中文两个字节,英文两个字
byte[] bb="hello".getBytes("gb2312");
System.out.println("bb.length:::"+bb.length);
我查了一些资料,都说gb2312中的所有字符都是用二个字节表示。如果是这样,那我上面的程序中bb字节数组的长度应该是10啊
可结果却是却是5.我想请问gb2312中的英文字母符号到底是用几个字节表示啊?
答:GB2312中1区到15区共682个字符或图形符号都是全角方式下的字符。即:
若byte[] bb="hello".getBytes("gb2312");(注意是全角方式下),bb字节数组的长度就会是10了。
因此:gb2312中的所有字符都是用二个字节表示(是因为:它的字符都是全角方式)。gb2312中不会对半角方式下的字符编码的(这是ASCII码的事情),因此:在getBytes("gb2312");转换时,半角的字符都是一个字节,全角的同样字符才是两个字节。
我知道GB2312是咱国家的标准,问题是在getBytes(“gb2312”),人家是如何处理的,不认识你的字
符集?,还是视为别的字符集
在半角方式下输入的字符串,在getBytes("GB2312")时变成了ASCII的编码方式,你觉得合理吗?
throws UnsupportedEncodingException使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。
当此字符串不能在给定的字符集中解码时,该方法无指定的行为。当需要进一步控制解码过程时,应使用 CharsetEncoder 类。
参数:
charsetName - 受支持的 charset 名称
返回:
结果字节数组
抛出:
UnsupportedEncodingException - 如果指定的字符集不受支持
GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。01-09区为特殊符号。
16-55区为一级汉字,按拼音排序。
56-87区为二级汉字,按部首/笔画排序。
10-15区及88-94区则未有编码。举例来说,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。字节结构
在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。例如“啊”字在大多数程序中,会以0xB0A1储存。(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。