刚才发现个问题,描述如下前提:
1.测试环境:windowsXP中文版(以下简称xp)
2.有一个hello.txt文件里写着“测试”2个中文字。
test1
把xp的区域与语言选项设为:中文(中国)
从hello.txt中用BufferedReader读入"测试"存储在string str中
从str中取得byte[] : byte[] b = str.getBytes("编码方式");
当编码方式为gbk时:b={-78,-30,-54,-44}
当编码方式为iso-8859-1时:b={63,63}
当编码方式为utf-8时:b={26,-75,-117,-24,-81,-107}test2
把xp的区域与语言选项设为:英文(美国)
从hello.txt(与上面是同一个文件)中用BufferedReader读入"测试"存储在string str中
从str中取得byte[] : byte[] b = str.getBytes("编码方式");
当编码方式为gbk时:b={63,63,63,63}
当编码方式为iso-8859-1时:b={-78,-30,-54,-44}
当编码方式为utf-8时:b={-62,-78,-61,-94,-61,-118,-61,-108}得到结果:
中文和英文时用同样的编码得到的byte[]不一样
还有,中文时用gbk=英文时用iso-8859-1这到底是怎么回事?????

解决方案 »

  1.   

    用BufferedReader读取文件时,是按照操作系统的默认编码来读取文件的,
    hello.txt源文件是GBK的编码,到英文系统下,用BufferedReader读取出来的就是错的,应该用字节流读取再转成GBK字符串
      

  2.   

    是你错了,英文系统的话要先用字节流读取再转换GBK字符串
      

  3.   

    问题出在你用 BufferedReader 读这个 hello.txt 时没有指定编码方式,所以实际使用的是系统缺省的编码方式。当系统缺省的编码方式是 GBK 的时候,结果就是正确的;当系统缺省的编码方式不是 GBK 时(你的 test2),读出来的 str 已经是错误的了(此时它是一个含有 4 个怪字符的字符串)。
      

  4.   

    所以,结论是:使用 BufferedReader 的时候,一般要显式指定编码方式,不要寄希望于系统缺省的编码方式。