我看了孙鑫的Java讲座,有一道程序运行情况如下:代码附后
运行情况:(jdk1.4.2 和jdk1.5都一样)
-------
维新q //输入值
维新 //在孙鑫的视频讲座中运行结果为乱码
4
??   //在孙鑫的视频讲座中运行结果为正常
————import java.util.*;
import java.nio.charset.*;
class CharsetTest
{
public static void main(String[] args) throws Exception
{
Properties pps=System.getProperties();
pps.put("file.encoding","ISO-8859-1");
int data;
byte[] buf=new byte[100];
int i=0;
while((data=System.in.read())!='q')
{
buf[i]=(byte)data;
i++;
}
String str=new String(buf,0,i);
System.out.println(str);//讲座中打印是乱码,可是在我机子上正常显示。
System.out.println(i);
String strGBK=new String(str.getBytes("ISO-8859-1"),"GBK");
System.out.println(strGBK);//讲座中打印正常,可是在我机子上是“??”。
}
}

解决方案 »

  1.   

    你应该不是windows中文版系统吧?
      

  2.   

    刚才测试了!
    没办法,不管设置编码是
    gbk还是iso-8859-1都和你的结果是一样的
      

  3.   

    windows 区域里语言设置是不是E文啊?
      

  4.   

    为什么英文和中文不一样,解释一下。我看了一下File.encodeing是GBK,按照孙鑫讲座应该不出现相反的情况。
      

  5.   

    把str.getBytes("ISO-8859-1")该为str.getBytes("gb2312")就可以了。
    如下:import java.util.*;
    import java.nio.charset.*;
    import java.io.*;
    class CharsetTest
    {
    public static void main(String[] args) throws Exception
    {
    Properties pps=System.getProperties();
    pps.put("file.encoding","ISO-8859-1");
    int data;
    byte[] buf=new byte[100];
    int i=0;
    while((data=System.in.read())!='q')
    {
    buf[i]=(byte)data;
    i++;
    }
    String str=new String(buf,0,i);
    System.out.println(str);//讲座中打印是乱码,可是在我机子上正常显示。
    System.out.println(i);
    //String strGBK=new String(str.getBytes("ISO-8859-1"),"GBK");
                      String strGBK=new String(str.getBytes("gb2312"),"GBK");
    System.out.println(strGBK);//讲座中打印正常,可是在我机子上是“??”。
    }
    }顺便给你发点关于java中文问题的质料:
      

  6.   

    本人的JBuilderX的字体在Editor下的Dsplay下的Font family下改动后又更改回来,可是中文就变成了方块,请教各位帮帮小弟!感激!!!
      

  7.   

    我也出现了同样的问题,好象File.encodeing不管怎么设置都没有用
      

  8.   

    楼主,我运行你的程序时没有问题,和讲座中预期的答案是一样的,其实相识乱码时,就是因为当时系统中的编码是ISO-8859-1 而不是支持中文的GBK 你可以在ppt.put()  这句话后面加上System.out.println(pps.get("file.encoding")); 看看你当前的编码格式是什么,如果是iso就会打印中文的时候出现乱码,如果已经转成了GBK的话就没问题了
      

  9.   

    String str=new String(buf,"iso-8859-1");
    System.out.println(str);
    System.out.println(i);
    String strGBK=new String(str.getBytes("ISO-8859-1"),"GBK");
    System.out.println(strGBK);改成这样就和讲座中一样了
      

  10.   

    ZFL_progress(兴软)  把那个资料发给我一份好吗?
    Email:[email protected]
      

  11.   

    topil(认认真真学习,塌塌实实工作) 打印的是GBK,但是还是有问题。
      

  12.   

    中间代码改为如下:System.out.println(pps.get("file.encoding"));结果是:GBK,再看一下最后注释,谁能解释一下。
              Properties pps=System.getProperties();
    //pps.list(System.out);
    //pps.put("file.encoding","ISO-8859-1");
    System.out.println(pps.get("file.encoding"));
    int data;
    byte[] buf=new byte[100];
    int i=0;
    while((data=System.in.read())!='q')
    {
    buf[i]=(byte)data;
    i++;
    }
    //String str=new String(buf,0,i); 有问题,和讲座不一样
    String str=new String(buf,"iso-8859-1");//和讲座的一样
    System.out.println(str);
    System.out.println(i);
    String strGBK=new String(str.getBytes("ISO-8859-1"),"GBK");
    System.out.println(strGBK);
      

  13.   

    对了,不管是否设置encoding,即注释和不注释pps.put("file.encoding","ISO-8859-1");结果都是一样的。为什么?(注释后打印的是:GBK,不注释打印的ISO,但最终输出结果是一样的)
      

  14.   

    wuyexinling(午夜心铃) :你好,资料已经发过去了!
      

  15.   

    ISO-8859-1没有gbk支持中文的性能好。
    不用ISO-8859-1就可以了,编码和解码最好用同一种编码格式。