关于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请问为什么第一段代码打印到控制台的时候出现乱码,而复制文件却不会出现乱码?
我已经知道如何解决这个乱码问题,我现在想知道的是为什么,请大家从编码原理的角度来解释这个问题,谢谢大家!

解决方案 »

  1.   

    你读的时候没有设置字符集,默认是utf-8去读,windows控制台编码默认GBK,显示是会有问题啊,更不要说utf-8还有文件头加在里面,你用个gbk编码的文件来试试
    写文件你只是把字节copy过去而已
      

  2.   

    哦?我IO学的是不怎么好,愿闻其详?
    lz的代码我也试过,用gbk编码的文件打印出来是没有问题的,
    utf8编码的才会乱码
      

  3.   

    我认同二楼的观点,你想不出乱码可以用InputStreamReader来设置下 读入的编码
      

  4.   


    这个说法正确。
    windwos的编码是GBK。你读文件,是GBK,写文件的时候也是GBK。
      

  5.   

    文件系统的编码与Java运行环境的编码不一样