当前位置:编程学习 > JAVA >>

关于java中字符的编码和解码问题

最近在研究字符的编码和解码问题,本来觉得很简单的事情,可是深入研究,却发现自己越来越搞不懂了,不说废话了,问题:
java中的字符串都是以字符数组来保存的,而字符都是以Unicode来保存的,这儿没问题。可是String.getBytes();究竟意味着什么?
举个例子:
String str = "中国";
str在内存中的保存的形式是:4e2d 56fd unicode编码
而经过byte[] bytes = str.getBytes("GBK");或者 = str.getBytes();
之后,得到bytes的结果却是:D6D0 B9FA 中文GBK编码

我现在的问题是,unicode和GBK明显用的不是一个字符集
4e2d 56fd 是中国两个汉字在unicode字符集中对应的序号
而D6D0 B9FA 是中国两个汉字在GBK字符集中对应的序号,

虚拟机是怎么仅仅根据“中国”在unicode的序号就找到了GBK中“中国”两个字的序号???

我的假设是这样的:
每个汉字在操作系统中都对应一个字形,比如“中”,在操作系统中就对应一个M*M的点阵来保存字形,
java在用getBytes()转码的时候,就是首先根据unicode编码对应的字形,找到字形在操作系统中的代号,
然后根据这个字形,或者字形代号,找到该字形在GBK字符集中的序号,然后作为结果返回。

不知道这个想法对不对,本想对jdk源码进行断点调试来找答案,可是对jdk源码调试又比较麻烦,还得对源码进行重新编译才能看到局部变量,因为这段时间工作确实比较忙,没时间来细细研究,所以在此跟大家讨论讨论,本人今年刚毕业,水平有限,望指点
--------------------编程问答-------------------- 字符什么的,最终以字节形式保存的吧。而且也不会一定以unicode码保存吧。
--------------------编程问答-------------------- 看看StringCoding和Charset类就明白了。 --------------------编程问答-------------------- 字符如果编码,解码正确的话,确实是unicode保存的,在java中,这个不用怀疑 --------------------编程问答-------------------- 我猜肯定是有个映射关系,在内存中有一个一一对应的存储格式,JVM算法上怎么实现的就不清楚了
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,