日期:2014-05-20  浏览次数:20753 次

java I/0乱码问题
关于FileReader读取文本文件数据含有乱码的问题,请看以下两个片段的代码:

第一、

FileReader fr = new FileReader("C:\\带有中文的文件.txt");
int i;
while( (i = fr.read()) != -1) {
System.out.print((char)i);
}
fr.close();

执行完以上代码之后,把文本文件里的内容打印到屏幕上有中文乱码的问题。



再看以下代码:
第二、

FileReader fr = new FileReader("C:\\带有中文的文件.txt");
FileWriter fw = new FileWriter("D:\\复制后的文件.txt");
int i;
while( (i = fr.read()) != -1) {
fw.write(i);
System.out.print((char)i);
}
fr.close();
fw.close();

执行完以上代码之后文件被成功复制,复制后的文件并没有乱码出现,中文字符正常显示。



我的问题是:
使用同样的FileWriter请问为什么第一段代码打印到控制台的时候出现乱码,而复制文件却不会出现乱码?
我已经知道如何解决这个乱码问题,我现在想知道的是为什么,请大家从编码原理的角度来解释这个问题,谢谢大家!

------解决方案--------------------
你读的时候没有设置字符集,默认是utf-8去读,windows控制台编码默认GBK,显示是会有问题啊,更不要说utf-8还有文件头加在里面,你用个gbk编码的文件来试试
写文件你只是把字节copy过去而已
------解决方案--------------------
我认同二楼的观点,你想不出乱码可以用InputStreamReader来设置下 读入的编码
------解决方案--------------------
引用:
你读的时候没有设置字符集,默认是utf-8去读,windows控制台编码默认GBK,显示是会有问题啊,更不要说utf-8还有文件头加在里面,你用个gbk编码的文件来试试
写文件你只是把字节copy过去而已


这个说法正确。
windwos的编码是GBK。你读文件,是GBK,写文件的时候也是GBK。
------解决方案--------------------
文件系统的编码与Java运行环境的编码不一样