gb2312中的英文字母占几个字节?

Wiseasy 2008-11-07 04:30:20
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中的英文字母符号到底是用几个字节表示啊?
...全文
4355 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xphbsy 2011-01-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jiangnaisong 的回复:]
引用 13 楼 ZiSheng 的回复:
大家别在这猜啊,找出权威的sun公司是如何解释GB2312

嘿嘿,权威的如何解释GB2312不是sun公司,而是我们国家自己的标准啊,每一个大专、大学的任何学生,其计算机基础课程中都会详细讲解GB2312的啊。
byte[] bb="hello".getBytes("gb2312");
System.out.println("bb.len……
[/Quote]
谢谢您两年多以前的回复!有收获!
小傻阿明 2010-12-18
  • 打赏
  • 举报
回复
http://www.knowsky.com/resource/gb2312tbl.htm
larkin0620 2008-11-09
  • 打赏
  • 举报
回复
.length是不是字符串的长度啊?
ZiSheng 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jiangnaisong 的回复:]
引用 13 楼 ZiSheng 的回复:
大家别在这猜啊,找出权威的sun公司是如何解释GB2312

嘿嘿,权威的如何解释GB2312不是sun公司,而是我们国家自己的标准啊,每一个大专、大学的任何学生,其计算机基础课程中都会详细讲解GB2312的啊。
byte[] bb="hello".getBytes("gb2312");
System.out.println("bb.length:::"+bb.length);
我查了一些资料,都说gb2312中的所有字符都是用二个字节表示。如果是这样,那我上面的程序中bb字节数…
[/Quote]
你的意思是说在全角方式下输入的字符串,在getBytes("GB2312")时会按照GB2312编码的方式
在半角方式下输入的字符串,在getBytes("GB2312")时变成了ASCII的编码方式,你觉得合理吗?
ZiSheng 2008-11-08
  • 打赏
  • 举报
回复
回16楼:
我知道GB2312是咱国家的标准,问题是在getBytes(“gb2312”),人家是如何处理的,不认识你的字
符集?,还是视为别的字符集。。。
云上飞翔 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ZiSheng 的回复:]
大家别在这猜啊,找出权威的sun公司是如何解释GB2312
[/Quote]
嘿嘿,权威的如何解释GB2312不是sun公司,而是我们国家自己的标准啊,每一个大专、大学的任何学生,其计算机基础课程中都会详细讲解GB2312的啊。
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");转换时,半角的字符都是一个字节,全角的同样字符才是两个字节。
FL1429 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 FL1429 的回复:]
Java code谁让你 getBytes了,这样的话,并不代表他们占用内存的大小,而是他们自身的大小。??

不是一回事?....才知道的.
[/Quote]

还是想不通阿..给我解释解释...

他的字节长度在内存中难道还会有变化?
FL1429 2008-11-08
  • 打赏
  • 举报
回复
谁让你 getBytes了,这样的话,并不代表他们占用内存的大小,而是他们自身的大小。??

不是一回事?....才知道的.
ZiSheng 2008-11-08
  • 打赏
  • 举报
回复
大家别在这猜啊,找出权威的sun公司是如何解释GB2312
老紫竹 2008-11-08
  • 打赏
  • 举报
回复
谁让你 getBytes了,这样的话,并不代表他们占用内存的大小,而是他们自身的大小。
在 java里面,都是unicode,所以都是2个字节(甚至部分三个字节), 但如果你转成了 byte,则255以内的,都是一个字节了。
jiannye 2008-11-08
  • 打赏
  • 举报
回复
分区表示
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)。

jiannye 2008-11-08
  • 打赏
  • 举报
回复
public byte[] getBytes(String charsetName)
throws UnsupportedEncodingException使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。
当此字符串不能在给定的字符集中解码时,该方法无指定的行为。当需要进一步控制解码过程时,应使用 CharsetEncoder 类。


参数:
charsetName - 受支持的 charset 名称
返回:
结果字节数组
抛出:
UnsupportedEncodingException - 如果指定的字符集不受支持
TJYnebula 2008-11-08
  • 打赏
  • 举报
回复

ASCII 英文一个字节
gb2312,gbk 中文两个字节,英文一个字节
在中文系统中ansi一般指gb2312或gbk
GB2312、GBK都属于双字节字符集 (DBCS)
Utf-8 中文三个字节,英文一个字节
Unicode 中文两个字节,英文两个字
ZHANGBINFLY 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 caironghuicxz 的回复:]
对,是一个字节啊。
汉字才两个字节啊。
[/Quote]
真假?,不要人云亦云啊
caironghuicxz 2008-11-07
  • 打赏
  • 举报
回复
对,是一个字节啊。
汉字才两个字节啊。
冰思雨 2008-11-07
  • 打赏
  • 举报
回复
在GB2312的编码中,数字和字母(也就是说ACSII码所能表示的字符)都编码成一个字节。
所有的简体中文的汉字,被编码成两个字节。并且,汉字编码的两个字节,他们的第一个bite值都为1.
夜的眼2021 2008-11-07
  • 打赏
  • 举报
回复
1个字节,汉字占2个,UNICODE全都是双的
hbgzg3006 2008-11-07
  • 打赏
  • 举报
回复
那是两个字节省去了汉字编码,因为gb2312主要是用来编码汉字的,如果你非要去编ascll,也必须得兼容阿
可以测试一下

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等试一下就知道了。
Wiseasy 2008-11-07
  • 打赏
  • 举报
回复
但为什么很多权威的资料上都说gb2312编码的所有字符都是用二个字节表示呢?是理论与实现的区别吗?
hbgzg3006 2008-11-07
  • 打赏
  • 举报
回复
1个,汉字的时候才是2个。gb2312,utf-8等,前面的编码跟Ascll都是一致的。
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧