当前位置: 首页 > news >正文

关于readline方法使用的一个中文乱码引发的思考

故事起源于这段代码,我想给一个本地地址然后去读取文件内容,然后使用了reader.readLine();方法,但是本地没有任何报错,但是线上中文乱码导致直接报错了。

 BufferedReader reader;try {reader = new BufferedReader(new FileReader(filePath));String line = reader.readLine();

问题原因:

FileReader属于字符流,是读取字符文件的便捷类。其继承自InputStreamReader,后者是将字节流转换为字符流的的桥梁,即将字节信息转换为字符信息。实际上, FileReader在类内部实现过程中也是利用了InputStreamReader完成字节流到字符流的转化,只不过转化时采用的字符集为系统默认的字符集。
说到默认字符集那就有意思了,之前公司我也使用过这个方法,没报错的原因是一直全部使用linux服务器,linux服务器默认编码是utf-8,所以就没有报错。但是win就不一样了。

举例说明:

如果文件保存时的编码设定为UTF-8, 那么在中文操作系统使用 FileReader时就会发生乱码,因为中文操作系统平台的默认字符集为GBK,这和程序的默认编码或者是文档的编码没有关系。
我把read方法重新修改的内容全部粘贴到这里:提供思路参考。。跳个坑

public List<List<String>> read(String filePath){List<List<String>> lists = new ArrayList<List<String>>();BufferedReader reader;try {reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));String line = reader.readLine();while (line != null) {String str  = line.replaceAll("`","");System.out.println("字符串"+str);if (str.contains("收支金额")){line = reader.readLine();continue;}List<String> result = Arrays.asList(str.split(","));if (result.size()<=Constant.NUM_INT_5){break;}System.out.println("导出的结果内容:"+result);lists.add(result);//                // read next lineline = reader.readLine();}reader.close();} catch (IOException e) {e.printStackTrace();}return lists;}

反思:

这个现象也在提示我,以后要多多考虑环境问题,固有思维让我觉得只要文件是utf-8,程序的编码是utf-8就一定不会出现中文乱码,其实并不是这样,比如这次的错误,有些java的包不知其所以然是真的不行。越常用的反而要了解透彻

小问题,反而要着重思考。

http://www.lryc.cn/news/213124.html

相关文章:

  • BUUCTF 神秘龙卷风 1
  • 【JavaEE初阶】 认识文件与Java中操作文件
  • 数据结构───链表
  • SQLAlchemy删除所有重复的用户|Counter类运用
  • Lec11 Thread switching (Robert)
  • 前端的简单介绍
  • 云服务器 centos 部署 code-server 并配置 c/c++ 环境
  • Ubuntu 22.04 安装 Terraform
  • MLF - 麻辣粉
  • Flutter三棵树的创建流程
  • 思维训练第二课 独立主格
  • 一致性哈希揭秘,深入解析其工作原理
  • 前端环境的安装 Node npm yarn
  • 基于机器视觉的银行卡识别系统 - opencv python 计算机竞赛
  • 大数据工具-kafkaUi-lite
  • Vdue之模版语法指令过滤器计算属性监听属性
  • Mysql权限控制语句
  • 小程序如何导入配送账号
  • ubuntu(18.04) 安装 blast 并在php中调用
  • UML—时序图是什么
  • 【每日一题Day364】LC2003每棵子树内缺失的最小基因值 | dfs
  • 调试记录 单片机GD32F103C8T6(兆易创新) 程序烧写完成但是没有现象 (自己做的板子)
  • Leetcode刷题笔记--Hot91--100
  • 算法训练一——链表
  • 【JAVA】类与对象的重点解析
  • ES6对象扩展
  • docker应用部署---Tomcat的部署配置
  • TestCenter测试管理工具
  • 索引切片复习
  • 想入门网络安全,这些前置准备要做好!