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来设置下 读入的编码
------解决方案--------------------
这个说法正确。
windwos的编码是GBK。你读文件,是GBK,写文件的时候也是GBK。
------解决方案--------------------文件系统的编码与Java运行环境的编码不一样