jdk上,
public byte[] getBytes()使用平台的默认字符集将此 String 编码为 byte 序列。这个默认的字符集可以通过【System.getProperty("file.encoding")】方法查出来吗?之前看到过文章说是,java平台的默认编码是unicode的(不是很确定),
写了下测试程序:System.out.println(System.getProperty("file.encoding"));1.输出gbk,不是unicode啊?
String str = "我";
System.out.println("===========默认==============");
byte[] b = str.getBytes();
for(int i=0;i<b.length;i++) {
System.out.println(b[i]);
}

System.out.println("===========Unicode==============");
byte[] b5 = str.getBytes("Unicode");
for(int i=0;i<b5.length;i++) {
System.out.println(b5[i]);
}2.这两个的输出结果也不一致啊,或者如果默认编码是其他的话,会不会一样呢?
3.写文件的时候,...........
txtFile = new File("3.txt");
if (txtFile.exists()) {
os = new FileOutputStream(txtFile);
osw = new OutputStreamWriter(os,"UTF-8");-----3.1
bw = new BufferedWriter(osw);
String str = "我----" + System.getProperty("line.separator") + "是一个兵";
bw.write(str);
}
...........如果【3.txt】的文件类型是【UTF-8】的时候,【3.1】的编码格式必须是UTF-8,而不能是GBK啊,
难道这种编码格式是根据写入的文件类型来决定的?

解决方案 »

  1.   

    我觉得JAVA应该是用默认字符集将字符转换成Unicode的字符的,java显示的都是Unicode的字符,而不是使用Unicode编解码.
      

  2.   

    我们在处理java的编码问题时,要分清楚三个概念:Java采用的编码:unicode,JVM平台默认字符集和外部资源的编码。---Java的class文件采用utf8的编码方式,JVM运行时采用utf16。Java的字符串是unicode编码的。总之,Java采用了unicode字符集,使之易于国际化。
      

  3.   

    貌似没有GBK编码啊,这是和操作系统有关系的?
      

  4.   


    JVM默认字符集 和JVM运行时字符集是分开的?
    指点一下
      

  5.   

    jvm内部处理的字符集对用户是透明的。也就是你不必关系jvm在内存里是如何保存字符的。(其实是utf-16编码)。你只需关心的是你以gbk编码保存的文件,读文件的时候也一定要以gbk进行解码就行了。String.getBytes()返回的默认字符集的编码。文件中的数据是以字节的形式保存的。
      

  6.   

    1.默认字符集,是指操作系统的编码吗?
    2.文件的编码格式是什么,那读出,输入的Strean流的编码格式就得是什么吗(问题3)
      

  7.   

    我们在处理java的编码问题时,要分清楚三个概念:Java采用的编码:unicode,JVM平台默认字符集和外部资源的编码。---Java的class文件采用utf8的编码方式,JVM运行时采用utf16。Java的字符串是unicode编码的。总之,Java采用了unicode字符集,使之易于国际化。
      

  8.   

    首先:byte[] b = str.getBytes(); 和byte[] b = str.getBytes(“GBK”);结果是一样的!
    一般的,国内的如果window中文版的话,默认GBK的。
    其次:当str为英文时:一下都是相等的。即兼容的
    byte[] b=a.getBytes("ISO-8859-1");
    byte[] b=a.getBytes("GBK");
    byte[] b=a.getBytes();
    byte[] b=a.getBytes("UTF-8");
    而如果汉字的话:GBK两字节表示,UTF-8三字节表示,UTF-16四字节表示。