为什么流操作的文本是不一样的?

dukcho 2004-09-08 01:52:13
你好,Java中使用流来对文件进行操作,把相同的字符串写入到文本中:
第一个用的是FileOutputStream:
fos.write(str.getBytes());
第二个用的是FileWriter:
fw.write(str);

这样的话,第一个写出的内容在记事本中打开为乱码;而第二个写出的内容打开则为原内容,这是为什么? 能详细解释一下么?我对此很是困惑!
...全文
271 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dukcho 2004-09-08
  • 打赏
  • 举报
回复
嗯,谢谢大家!
我一直困惑的是:我们通常所说的编码是说字符在内存中是如何表示的么?那么不同编码类型的字符保存到文件的时候有什么不同?

这个大家有什么不同的见解!
32zyc 2004-09-08
  • 打赏
  • 举报
回复
谢谢!
zypchina 2004-09-08
  • 打赏
  • 举报
回复
Windows 2000的默认编码格式是GBK
zypchina 2004-09-08
  • 打赏
  • 举报
回复
如果是编码的问题你就做一下编码转换

String test="内容";

byte[] dest=new String(test.getBytes(),"目的编码").getBytes("目的编码")
zypchina 2004-09-08
  • 打赏
  • 举报
回复
String test="测试";
File a = new File("c:/test.txt");
FileWriter fw = new FileWriter(a);
FileOutputStream fo = new FileOutputStream(a,true);
fw.write(test);
fw.flush();
fo.write(test.getBytes());
我在windows xp下测试没有问题啊.
dukcho 2004-09-08
  • 打赏
  • 举报
回复
能再详细说明一下为什么?
fos.write(str.getBytes("GB2312"));
是对的,而
fos.write(str.getBytes());
是错的么?

我知道是因为编码的原因,但是Windows2000内部默认不是Unicode么,为什么是GB2312哪?另外我们通常所说的编码是说字符在内存中是如何表示的么?那么不同编码类型的字符保存到文件的时候有什么不同?

谢谢大家参与,分数无所谓的,如果不够,可以另开!
karaling 2004-09-08
  • 打赏
  • 举报
回复
同意
nochess 2004-09-08
  • 打赏
  • 举报
回复
32zyc说的不对。OutputStream写入时用byte,但写到文件里还是文本。检查一下字符集。
32zyc 2004-09-08
  • 打赏
  • 举报
回复
OutputStream处理的是字节码,而Writer类处理的是字符,
或者可以说,前者写入的一般人是看不懂的,后者写入的人才能看懂
但前者的效率要搞
takecare 2004-09-08
  • 打赏
  • 举报
回复
fos.write(str.getBytes("GB2312"));
应该也是对的内容。

因为String是区域相关Locale的。

62,623

社区成员

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

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