菜鸟一小枚Sun 2018-06-04 15:10 采纳率: 75%
浏览 1236
已采纳

io FileReader 乱码问题 求解答

今天复习java基础知识时候遇到个问题。我用流存的时候是UTF-8,但是使用FileReader
读的时候,竟然不乱码。。为什么呢?难道FileReader不是GBK格式吗?

 public static void main(String[] args) throws Exception {
      //writFile(); 
            readFile();
    }
    public static  void readFile()throws Exception{
        FileReader fileReader = new FileReader("F:/a.txt");
        int len=0;
        while ((len=fileReader.read())!=-1) {

            System.out.println((char)len);
        }
        fileReader.close();
    }
    public static void writFile()throws Exception{
        FileOutputStream fileOutputStream = new FileOutputStream("F:/a.txt");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"utf-8");
        outputStreamWriter.write("您好ass");
        outputStreamWriter.close();
    }
  • 写回答

7条回答 默认 最新

  • radeonxhl 2018-06-05 09:16
    关注

    你这样new出来的FileReader,底层是使用默认字符编码的,默认字符编码是Charset.defaultCharset(),这个是和运行环境有关的,也可以通过java命令行参数指定。

    总之,这个默认字符编码不是一个开发人员完全可以掌控的参数,也许你本机是好的、放到服务器上乱码,或者反之。

    所以,这里保险点的办法是先获得字节流(FileInputStream),然后把字节流转成字符流,转的时候是可以自己制定字符编码的,这样不管是什么环境,程序的运行结果都是一致的。

    另外,close()方法一定要写在finally{}里,虽然不是正式的代码,但要养成这个习惯。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做