是java错了?是windows错了?还是我错了?

fifadxj 2006-08-29 01:54:23
刚才发现个问题,描述如下

前提:
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

这到底是怎么回事?????
...全文
244 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
maquan 2006-08-29
  • 打赏
  • 举报
回复
所以,结论是:使用 BufferedReader 的时候,一般要显式指定编码方式,不要寄希望于系统缺省的编码方式。
maquan 2006-08-29
  • 打赏
  • 举报
回复
问题出在你用 BufferedReader 读这个 hello.txt 时没有指定编码方式,所以实际使用的是系统缺省的编码方式。

当系统缺省的编码方式是 GBK 的时候,结果就是正确的;当系统缺省的编码方式不是 GBK 时(你的 test2),读出来的 str 已经是错误的了(此时它是一个含有 4 个怪字符的字符串)。
you_meng 2006-08-29
  • 打赏
  • 举报
回复
你错了,永远也不要怀疑一门语言
iboy1983 2006-08-29
  • 打赏
  • 举报
回复
是你错了,英文系统的话要先用字节流读取再转换GBK字符串
zhangj0571 2006-08-29
  • 打赏
  • 举报
回复
知错就改才是好学生
dreamover 2006-08-29
  • 打赏
  • 举报
回复
是你错了
flyxxxxx 2006-08-29
  • 打赏
  • 举报
回复
用BufferedReader读取文件时,是按照操作系统的默认编码来读取文件的,
hello.txt源文件是GBK的编码,到英文系统下,用BufferedReader读取出来的就是错的,应该用字节流读取再转成GBK字符串

62,614

社区成员

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

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