读取文件时内容乱码解决方法

读取文件的时候,读取中文时,中文乱码。

测试:

读取的文件code.txt的内容为:

      中文测试...
      test Chinese...

测试代码:
 

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadFile {
	public static void main(String[] args) throws IOException {
		File file = new File("C:\\Users\\Administrator\\Desktop\\code.txt");
		FileInputStream inputStream = new FileInputStream(file);
		byte[] b = new byte[512];
		int len = 0;
		String str = "";
		while((len = inputStream.read(b)) != -1) {
			str += new String(b, 0, len);
		}
		System.out.println(str);
	}
}

测试结果不出意外的出现乱码...

解决方法:

先设置 inputStream 的编码格式,然后再读取

对上面的代码进行修改:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class ReadFile {
	public static void main(String[] args) throws IOException {
		File file = new File("C:\\Users\\Administrator\\Desktop\\code.txt");
		FileInputStream inputStream = new FileInputStream(file);
		InputStreamReader readInputStream = new InputStreamReader(inputStream, "gb2312");
		char[] b = new char[512];
		int len = 0;
		String str = "";
		while((len = readInputStream.read(b)) != -1) {
			str += new String(b, 0, len);
		}
		System.out.println(str);
	}
}

再测试...

Ok... 

### Java InputStreamReader 解决乱码问题的编码设置 在 Java 开发中,`InputStreamReader` 是一个字符输入流,它将字节流转换为字符流。如果在使用 `InputStreamReader` 出现中文乱码问题,通常是由于字符编码不一致导致的。以下是解决乱码问题的关键点: #### 1. 统一字符编码 确保从文件或网络读取数据,源数据的编码与程序中指定的编码一致。如果不一致,可能会导致乱码。例如,如果源数据是 GB2312 编码,但程序中使用了 UTF-8 编码,则会引发乱码问题[^1]。 #### 2. 指定正确的字符集 `InputStreamReader` 提供了一个构造方法,允许开发者显式指定字符集编码: ```java public InputStreamReader(InputStream in, String charsetName) ``` 通过该构造方法,可以明确指定字符集编码,避免默认编码带来的问题。例如: ```java InputStream in = new FileInputStream("example.txt"); InputStreamReader isr = new InputStreamReader(in, "GB2312"); // 或者 "UTF-8" BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); ``` 上述代码中,明确指定了 `GB2312` 编码,确保读取的数据与源文件的编码一致[^2]。 #### 3. 常见编码尝试顺序 如果不确定源文件的编码类型,可以按照以下顺序尝试: - 首先尝试 `UTF-8` 编码。 - 如果仍然存在乱码问题,尝试 `GB2312` 或 `GBK` 编码。 这种策略能够覆盖大多数中文环境下的编码需求[^4]。 #### 4. 示例代码 以下是一个完整的示例,展示如何通过 `InputStreamReader` 正确读取带有中文内容文件: ```java import java.io.*; public class ReadFileExample { public static void main(String[] args) { String filepath = "example.txt"; // 文件路径 try (InputStream in = new FileInputStream(filepath); InputStreamReader isr = new InputStreamReader(in, "GB2312"); // 指定编码 BufferedReader br = new BufferedReader(isr)) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` 在上述代码中,明确指定了 `GB2312` 编码,确保读取的中文内容不会出现乱码[^3]。 #### 5. 注意事项 - 如果程序运行环境的默认编码与源文件编码不同,可能会导致乱码。因此,建议始终显式指定编码。 - 在处理多语言文本,优先考虑使用 `UTF-8` 编码,因为它支持几乎所有字符集。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值