有一个问题,一直想不通,看了不少文章,说java内部是用unicode编码存储的,而源文件可以用比如GBK, gb2312之类的编码。编译命令javac的过程就是,先根据源文件的编码类型(如GBK)读取源文件,再将其编译为unicode字符集的DE .class类文件。那么问题来了,我只是想知道,gbk的文件,或者说gbk的字符串,到底是怎么转换为unicode的,比如说gbk编码的“中文”二字,也许在计算机内存储的就是00010010,那计算机读取或存储也只能根据GBK的字符集编码在00010010和“中文”之间相互转换,到底是如何转化为unicode的编码的呢?我找不到他们之间的相互关系啊。谢谢。

解决方案 »

  1.   

    没太理解你的问题。但是gbk编码和Unicode编码的对照表操作系统肯定有存储。一般问题出在如何判断一个文件编码上,比如说给你一个文件你凭什么知道他是gbk的。utf8编码采取的是文件开始的三个字节,但是gbk编码并没有这个。有一个叫做cpdetector的项目,专门用于基于统计文本分析来推断编码。
      

  2.   

    我只找到 String的getBytes 可以设置单独字符串的编码集,问题可能没太明白意思。
      

  3.   

    byte[] bytes = ...//读取文件
    byte[] utf8bytes = new String(bytes,"gbk").getBytes("utf-8");
      

  4.   

    简单地说 gbk是一个译码表 unicode也是一份译码表 ascii 也是 
    楼主的问题大概是说一个说英语的和一个说中文的 他们俩怎么可能有办法交流 那么英汉字典就有用了 java中的unicode的地位和当今世界通用语英语差不多 Java要求所有字符集定义必须提供到unicode的双向转译
    曾经和大型机对接时对EBCDIC字符串的翻译就是自己开发的扩充版cp936字符集 字符集的提供程序就是对unicode对照表的实现
    我想这应该是楼主想知道的答案