Properties类中的put方法改掉默认GBK编码方式引发的小问题!

那个天真的人 2009-01-29 05:05:20
这是小弟在看孙鑫老师视频遇到的一个问题,程序如下,我用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);
}
}
到底是怎么一回事啊?知道的朋友帮忙解释一下,不胜感激!!!
...全文
197 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenjjing2lianee 2009-02-01
  • 打赏
  • 举报
回复
楼主
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
那个天真的人 2009-01-29
  • 打赏
  • 举报
回复
引用楼上"Properties pp = System.getProperties();这行代码其实是得到系统属性;"
这个我知道呀,孙老师说可以用pp.put方法来改变系统属性的啊,不对吗?
其实我要做的是想改变系统的file.encoding的值,使得当输入汉字时会出错,如果想达到
这样的效果,不该用put来修改吗?
wenjjing2lianee 2009-01-29
  • 打赏
  • 举报
回复
楼主,你把孙鑫老师的理解错了.
你的代码其实这样就可以了:

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();你也理解错误了;
楼主下次要细心点!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧