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基础知识之InputStreamReader流
https://blog.****.net/ai_bao_zi/article/details/81133476
FileReader编码问题
https://www.cnblogs.com/jpfss/p/9789390.html