Java中FileReader的编码问题

在使用FileReader出现了乱码的问题

FileReader是默认按中文系统的GBK来编码的,然后在UTF-8 -> GBK -> UTF-8的过程中编码出现损失造成结果不能还原最初的字符。

FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数。

所以我们直接用InputStreamReader代替FileReader,

InputStreamReader isr=new InputStreamReader(new FileInputStream(fileName),"UTF-8");这样读取文件就会直接用UTF-8解码,不用再做编码转换。

FileInputStream fis = new FileInputStream(f);
       InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); //指定以UTF-8编码读入
                BufferedReader br = new BufferedReader(isr);

可以这样写

        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"));  

InputStreamReader是字节流转为字符流的桥梁,首先要new一个FileInputStream字节流,再在该字节流上new 一个InputStreamReader,然后BUfferedReader 缓存流必须建立在一个存在的流的基础上

InputStreamReader类与FileReader类关系
      1、FileReader类仅仅是InputStreamReader的简单衍生并未扩展任何功能

      2、FileReader类读取数据实质是InputStreamReader类在读取,而InputStreamReader读取数据实际是StreamDecoder类读取

      3、因此在使用字符输入流的时候实际是StreamDecoder类在发挥作用

 

乱码问题的原因就是编码格式不一样,windows下的文件是UTF-8,但Java的编码格式是GBK,而fileReader默认的编码格式是系统的编码格式也就是gbk,无任何转换编码函数提供调用。

我们也可以将来eclipse的默认编码换成UTF-8

Java中FileReader的编码问题

JAVA基础知识之InputStreamReader流
https://blog.****.net/ai_bao_zi/article/details/81133476

FileReader编码问题

https://www.cnblogs.com/jpfss/p/9789390.html  

java中fileReader读取乱码问题

https://blog.****.net/qq_31492865/article/details/102505837