JAVA IO流读取中文出现乱码

乱码一般情况来说都是因为编码格式有问题,可能是写入的时候也可能是读取的时候。
本文所述情况为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什么的,有空可以研究下,欢迎在评论中补充~

你好!针对Java IO流读取文件出现乱码的问题,有几个可能的原因和解决方案。 1. 编码不匹配:如果文件是以非UTF-8编码保存的,而你使用了UTF-8编码读取文件,就会导致乱码。你可以尝试指定正确的编码来读取文件。例如,如果文件是以GBK编码保存的,你可以使用`InputStreamReader`类来指定GBK编码进行读取,示例代码如下: ```java try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt"), "GBK"))) { String line; while ((line = reader.readLine()) != null) { // 处理每一行数据 } } catch (IOException e) { e.printStackTrace(); } ``` 2. 字符集处理不当:在处理文本文件时,如果没有正确处理字符集,也可能导致乱码。你可以尝试使用`Charset`类来处理字符集,示例代码如下: ```java import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; try { Path path = Paths.get("file.txt"); Charset charset = Charset.forName("GBK"); // 根据文件实际编码调整 List<String> lines = Files.readAllLines(path, charset); for (String line : lines) { // 处理每一行数据 } } catch (IOException e) { e.printStackTrace(); } ``` 3. 文件内容损坏:如果文件本身存在损坏或者乱码,那么无论你以何种方式读取文件,都会出现乱码。请确保文件本身没有问题,可以尝试使用其他文本编辑器打开文件查看是否乱码。 希望以上解决方案能够帮助你解决问题!如果还有其他疑问,请随时提问。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值