无锡住房和城乡建设部网站,大型门户网站有哪些,镇江网站关键字优化,下载网页制作设计编辑器软件故事起源于这段代码#xff0c;我想给一个本地地址然后去读取文件内容#xff0c;然后使用了reader.readLine();方法#xff0c;但是本地没有任何报错#xff0c;但是线上中文乱码导致直接报错了。 BufferedReader reader;try {reader new BufferedReader(new FileReader(…故事起源于这段代码我想给一个本地地址然后去读取文件内容然后使用了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 ListListString read(String filePath){ListListString lists new ArrayListListString();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;}ListString 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的包不知其所以然是真的不行。越常用的反而要了解透彻
小问题反而要着重思考。