乱码一般情况来说都是因为编码格式有问题,可能是写入的时候也可能是读取的时候。
本文所述情况为JAVA IO流读取CSV/TXT文件出现乱码
原来我的主要代码如下:
// JAVA代码
//新建了缓冲读取器对象
BufferedReader reader = new BufferedReader(new FileReader(fileArray[i]));
String line = reader.readLine();
for (int j = 0; j < item.length; j++) {
// if (item[j].equals("产品编码"))
System.out.println(item[j]);
}
控制台输出如下:
乱码嘛,一般都是编码问题,我这里默认是utf-8编码模式,但是读取出来是乱码,直接用电脑打开是正常的。
下面是我的改进代码:
//主要是读取文件流的时候要设置好读取时的编码格式,第二句的GBK就是我读取文件时选择GBK编码模式
//如果不写的话,默认使用的就是utf-8模式的,就会出现乱码
//这完全看当时文件写入用的什么模式,要用对应的模式读取。
FileInputStream fis = new FileInputStream(fileArray[i]);// 换成你的文件名
// 换成你的文件的编码模式GBK utf-8等等,可以自己试试或者想办法获取文件的编码模式
InputStreamReader isr = new InputStreamReader(fis, "GBK");
//新建缓冲阅读器对象
BufferedReader reader = new BufferedReader(isr);
//输出到控制台的步骤是一样的
String line = reader.readLine();
for (int j = 0; j < item.length; j++) {
// if (item[j].equals("产品编码"))
System.out.println(item[j]);
}
控制台改进代码下的输出:
总结: 编码模式不对一般都是表现为中文乱码,无法读取,无法作比较等。所以新建阅读器对象要小心一些,或者提前搞清楚文件的编码模式。
PS好像有个方法可以获取文件的编码模式,getencoding什么的,有空可以研究下,欢迎在评论中补充~