比如现在有两句java代码
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("aa.txt"),"GBK");
osw.write("你好");
我想请教两个问题:
1.“你好”在内存中到底是以系统平台默认的编码集还是java的unicode编码集。
2.不管用什么码表往文件里写数据,“你好”的字节数据不都是固定的吗,为什么按照不同的编码集就能写出不同的字节数据呢编码Java存储

解决方案 »

  1.   

    1.在内存里都是unicode
    2.不太明白你的问题,编码集不同,编码和字符的对应关系就不同啊
    比如甲编码集用0001代表“你”,乙编码集用0002代表“你”,那么要在文件里写入“你”这个字符,用甲字符集就要写0001,用乙字符集就要写0002
      

  2.   

    如果你指定了编码方式,那么虚拟机会采用你指定的编码方式,如果不指定,则采用系统平台默认的编码集(就是你机器所用的编码集,就咱们现在用的是gbk).采用不同的编码方式,在内存中所占用的字节数不一样,如果你用UTF_8,“你好”就是六个字节!
      

  3.   

    1,应该是按系统来判定编码表的。2,"你好"这个词在GBK里可能对应的具体编码是“1 2” 有可能在UTF-8这张表里对应的就是“3 4”完全不一样,所以用什么编码就必须用对应的码表来解码