这是小弟在看孙鑫老师视频遇到的一个问题,程序如下,我用pp.put改掉了默认的GBK译码方式,照孙老师讲的如果运行后我输入中文的话那么输出将会是乱码,但我机子上运行过了怎么不会出现乱码的情况呀?(比如输入为:人民q  输出则为:人民)import java.io.*;
import java.nio.charset.*;
import java.util.*;
class CharsetTest
{
public static void main(String[] args)throws Exception
{
Properties pp = System.getProperties();
pp.put("file.encoding","ISO-8859-1");
int num;
int i=0;
byte[] bytes = new byte[100];
while((num=System.in.read())!='q')
{
bytes[i] =(byte)num;
i++;
}
String str = new String(bytes,0,i);
System.out.println(str);
}
}下面的程序是孙老师讲的改进方法,这样做之后就能正常输出了,但结果又相反,这次如果输入中文便会输出乱码了.(比如输入:人民q,输出则为:??)
import java.io.*;
import java.nio.charset.*;
import java.util.*;
class CharsetTest
{
public static void main(String[] args)throws Exception
{
Properties pp = System.getProperties();
pp.put("file.encoding","ISO-8859-1");
int num;
int i=0;
byte[] bytes = new byte[100];
while((num=System.in.read())!='q')
{
bytes[i] =(byte)num;
i++;
}
String str = new String(bytes,0,i);
String strGBK = new String(str.getBytes("ISO-8859-1"),"GBK");
System.out.println(strGBK);
}
}
到底是怎么一回事啊?知道的朋友帮忙解释一下,不胜感激!!!

解决方案 »

  1.   

    楼主,你把孙鑫老师的理解错了.
    你的代码其实这样就可以了:class CharsetTest 

    public static void main(String[] args)throws Exception 

    int num; 
    int i=0; 
    byte[] bytes = new byte[100]; 
    while((num=System.in.read())!='q') 

    bytes[i] =(byte)num; 
    i++; 

    String str = new String(bytes,0,i); 
    System.out.println(str); 

    } Properties pp = System.getProperties();这行代码其实是得到系统属性;
    pp.put();你也理解错误了;
    楼主下次要细心点!
      

  2.   

    引用楼上"Properties pp = System.getProperties();这行代码其实是得到系统属性;"
    这个我知道呀,孙老师说可以用pp.put方法来改变系统属性的啊,不对吗?
    其实我要做的是想改变系统的file.encoding的值,使得当输入汉字时会出错,如果想达到
    这样的效果,不该用put来修改吗?
     
      

  3.   

    楼主
    pp.put("file.encoding","ISO-8859-1");
    是否真的改变了系统file.encoding的值吗?
    你在代码中加上:System.out.printl(pp.get("file.encoding"));
    你会发现输出来是你新设的值:ISO-8859-1;
    你把file.encoding设为:AAAAAAAA
    结果给你输出:AAAAAAAA
    由你程序结果来看:系统的file.encoding也没有改变.
    String strGBK = new String(str.getBytes("ISO-8859-1"),"GBK"); 
    在你这个代码之前.str本来就不是ISO-0059-1;
    改了表面的值,系统缺省编码还是没变.
    你可以另外写个测试类:public class Test {
    public static void main(String[] args) {
    Properties pp = System.getProperties(); 
    String aa = pp.getProperty("file.encoding");
    System.out.println(aa);
    }
    }看你当前系统缺省编码值是什么;
    上面只是我的看法,也不一定正确.希望高手指点.
    楼主可以去这人网站去看下:http://topic.csdn.net/t/20060426/22/4716529.html