黑马程序员技术交流社区

标题: 修改默认字符集后依然能输出中文,怪了 [打印本页]

作者: 戴振良    时间: 2012-4-3 23:57
标题: 修改默认字符集后依然能输出中文,怪了
本帖最后由 戴振良 于 2012-4-4 00:34 编辑

在张孝详的IO视频中,有这么一段,把系统的默认字符集改为iso8859-1,则调用getBytes方法时会用默认的字符集来编码,我照着一模一样的做,可是我的却不行。
  1. import java.io.*;
  2. public class Test
  3. {
  4.         public static void main(String[] args) throws Exception {

  5.         System.setProperty("file.encoding","iso8859-1");//------------>代码1
  6.                 String str ="中国";              
  7.                 byte [] buf = str.getBytes();

  8.                 for(int i = 0;i < buf.length;i++)
  9.                        System.out.println(Integer.toHexString(buf[i]));
  10.                
  11.                for(int i = 0 ;i < buf.length;i++)
  12.                       System.out.write(buf[i]);

  13.                System.out.println();
  14.         }
  15. }
复制代码
输出内容为:
             ffffffd6
                       ffffffd0
                       ffffffb9
                       fffffffa
                       中国
这结果和注释掉代码1的结果是一样的,我不是把系统默认字符编码改为了iso8859-1了吗?为什么getBytes()方法并没有采用iso8859-1来获取字符的编码呢?
作者: 戴振良    时间: 2012-4-4 00:32
当我使用:byte [] buf = str.getBytes("iso8859-1");这个语句时,输出的结果才是iso8859-1的编码,奇怪了!
作者: 贠(yun)靖    时间: 2012-4-4 04:53
string 转换成 byte 有个重载方法
         byte[] getBytes(Charset charset)
         使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。   charset就是要传的字符编码  
  所以你传("iso8859-1");的时候  就使用了它的编码表  而不是查找默认的gbk的码表


System.setProperty("file.encoding","iso8859-1");//  设置系统属性   应该改变不了默认查找码表吧   
作者: 戴振良    时间: 2012-4-4 08:25
贠(yun)靖 发表于 2012-4-4 04:53
string 转换成 byte 有个重载方法
         byte[] getBytes(Charset charset)
         使用给定的 char ...

这在张孝详的视频IO视频中第10个视频里有,就是用这个,他的是可以的,不知道是不是机子不同,所以结果不同!
作者: 戴振良    时间: 2012-4-10 00:09
为什么我提的问题总是没什么人回答呀,问题还没解决呢又这样沉了,
请问怎样修改Java虚拟机的默认字符编码呀?
作者: 戴振良    时间: 2012-4-11 07:52
再顶再顶再顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2