关于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.mzph.cn/news/125750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 中model/View 架构 详解,以及案例实现相薄功能

model/View 架构 导读 ​ 我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的 Qt 要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改…

PHP自定义文件缓存实现

文件缓存&#xff1a;可以将PHP脚本的执行结果缓存到文件中。当一个PHP脚本被请求时&#xff0c;先查看是否存在缓存文件&#xff0c;如果存在且未过期&#xff0c;则直接读取缓存文件内容返回给客户端&#xff0c;而无需执行脚本 1、文件缓存写法一&#xff0c;每个文件缓存一…

【项目实训】汽车租贷系统(完整代码)

文章目录 1.实验目标2.实验设计3.完整代码4.具体分析5.实验结果附:系列文章1.实验目标 本实验旨在设计和实现一个汽车租赁系统,供客户使用。该系统能够根据客户的选择自动计算租金、租车日期、注意事项以及优惠金额等内容,并提供相应的服务和提示。 2.实验设计 2.1 类的设…

语音信号处理给音乐信号增加房间混响效果

语音信号处理给音乐信号增加房间混响效果 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务 1 源码布局 2 源文件与音频文件和生成文件 3 编译方法

vue-router学习(三) --- 导航守卫

文章目录 全局导航守卫路由独享导航守卫组件内的守卫完整的导航解析流程loadingBar 案例 全局导航守卫 beforeEachbeforeResolveafterEach 路由导航守卫 beforeEnter 组件导航守卫 beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave 全局导航守卫 当一个导航触发时&#x…

「Qt中文教程指南」如何创建基于Qt Widget的应用程序(四)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文描述了如何使用…

点云配准--对称式ICP

对称式ICP 写在前面的话 针对于局部平面不完美的情况&#xff0c;提出了一种对称式ICP目标函数&#xff0c;相较于传统的ICP方法&#xff0c;增大了收敛域&#xff0c;提高了收敛速度。论文理论说明不甚清楚&#xff0c;实验较少&#xff0c;但代码开源。 理论 对称目标函数…

elementUI树节点全选,反选,半选状态

// <template>部分 <div class"check-block"><el-divider></el-divider><el-checkbox :indeterminate"indeterminate" v-model"checkAll" change"handleCheckAllChange">全选</el-checkbox><e…

1-1 prometheus 概述

一、概述 二、特点 三、核心组件 四、基础架构 4.1 Prometheus 的主要模块包含 4.2 运行逻辑 五、Prometheus 与 Zabbix 的对比 六、总结 一、概述 1. 什么是prometheus? 开源系统监控 和 警报工具包受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Br…

518抽奖软件,可从Excel~Word~Pdf~网页导入名单

518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 从Excel、WPS表格导入 整列&#xff1a; 用鼠…

华泰证券:新奥能源:零售气待恢复,泛能与智家仍是亮点

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;由于新奥能源&#xff08;02688&#xff09;发布三季度经营数据&#xff1a; 1-3Q23&#xff1a;天然气零售量yoy-4.7%&#xff0c;燃气批发量yoy17.6%&#xff0c;综合能源销量yoy34.2%&#xff…

Java中 #{}和${}的区别

2023.10.31 #{}&#xff1a;先编译sql语句&#xff0c;再给占位符传值&#xff0c;底层是PreparedStatement实现。可以防止sql注入&#xff0c;比较常用。 ${}&#xff1a;先进行sql语句拼接&#xff0c;然后再编译sql语句&#xff0c;底层是Statement实现。存在sql注入现象。…

A. Directional Increase -前缀和与差分理解 + 思维

题面 分析 观察指针移动的性质&#xff0c;可以发现每一段都是从起点走到终点&#xff0c;在原路返回&#xff0c;这样每一段也就表示&#xff0c;在起点处加一&#xff0c;在终点处减一&#xff0c;形成了很明显的差分结构&#xff0c;思考能否构造出a数组的关键就是他的前缀…

JavaScript之React

前言 React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发。它可以让开发者编写可重复使用的 UI 组件&#xff0c;并且可以自动地更新 UI。React 的运行原理可以分为两个部分&#xff1a;虚拟 DOM 和组件更新。 虚拟 DOM React 使用虚拟 DOM 来代表实…

生态扩展:Flink Doris Connector

生态扩展&#xff1a;Flink Doris Connector 官网地址&#xff1a; https://doris.apache.org/zh-CN/docs/dev/ecosystem/flink-doris-connector flink的安装&#xff1a; tar -zxvf flink-1.16.0-bin-scala_2.12.tgz mv flink-1.16.0-bin-scala_2.12.tgz /opt/flinkflink环境…

相关性网络图 |显著性标记

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 本期教程 写在前面 此图是一位同学看到后&#xff0c;想出的一期教程。 最近&#xff0c;自己的事情比较多&#xff0c;会无暇顾及社群和公众号教程。 1 安装和加载相关的R包 library(ggraph) library(tidy…

MATLAB R2018b详细安装教程(附资源)

云盘链接&#xff1a; pan.baidu.com/s/1SsfNtlG96umfXdhaEOPT1g 提取码&#xff1a;1024 大小&#xff1a;11.77GB 安装环境&#xff1a;Win10/Win8/Win7 安装步骤&#xff1a; 1.鼠标右击【R2018b(64bit)】压缩包选择【解压到 R2018b(64bit)】 2.打开解压后的文件夹中的…

笔记本电脑的键盘鼠标如何共享控制另外一台电脑

环境&#xff1a; 联想E14 x2 Win10 across 2.0 问题描述&#xff1a; 笔记本电脑的键盘鼠标如何共享控制另外一台电脑 解决方案&#xff1a; 1.下载across软件&#xff0c;2台电脑都按装&#xff0c;一台设为服务端&#xff0c;一台客户端 2.把配对好设备拖到右边左侧…

第3章_基本select语句

文章目录 SQL概述SQL背景知识SQL分类 SQL语言的规则与规范SQL语言的规则SQL大小写规范注释命令规则&#xff08;暂时了解&#xff09;数据导入指令 基本的select语句select ...select ... from列的别名去除重复行空值参与运算着重号查询常数 显示表结构讲课代码课后练习 SQL概述…

【Spring Boot】详解restful api

目录 1.restful api 1.1.历史 1.2.内容 1.3.传参 2.Spring Boot中的Restful Api 1.restful api 1.1.历史 RESTful API&#xff08;Representational State Transferful Application Programming Interface&#xff09;是一种设计风格&#xff0c;用于构建基于网络的应用…