BufferedReader读文件乱码问题

本文介绍了在使用BufferedReader读取文件时遇到的中文乱码问题,并提供了在不同环境中(如MyEclipse与jar包)的解决方案。通过指定字符编码为utf-8,解决了导出成jar后出现的乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

最近做项目,要抓取远程服务器上返回的json,使用BufferedReader读取获取到的内容,在MyEclipse中跑的时候没有问题,但是打成jar包跑的时候json内容中文部分就乱码了。

原因:

可能和MyEclipse本身设置的编码有关系,MyEclipse运行环境设置的是utf-8,导出成jar之后,BufferedReader采用的是操作系统默认的字符编码。

解决方案:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

改为

BufferedReader in = 
new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));

 



转载于:https://my.oschina.net/JustLoveIT/blog/377969

在Java中取CSV文件时出现乱码,通常是因为文件的编码格式与程序使用的字符集不一致。常见的解决方案包括: - **指定正确的字符编码**:CSV文件可能使用的是`GBK`、`UTF-8`或其他编码格式,因此在文件时必须明确指定文件的实际编码。 - **使用合适的类和方法处理文件输入流**:例如 `InputStreamReader` 可以根据指定的字符集来解码字节流。 ### 解决方案 #### 1. 使用 `BufferedReader` 和 `InputStreamReader` 通过 `InputStreamReader` 指定文件的编码格式,可以有效解决乱码问题。以下是一个示例代码片段: ```java import java.io.*; public class ReadCSV { public static void main(String[] args) throws IOException { // 文件路径 String filePath = "d:\\example.csv"; // 使用 GBK 编码文件(根据实际情况调整) BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "GBK")); String line; while ((line = br.readLine()) != null) { System.out.println(line); // 打印每一行数据 } br.close(); } } ``` 如果文件是 `UTF-8` 编码,则将 `"GBK"` 替换为 `"UTF-8"` [^3]。 #### 2. 使用 `DataInputStream` 并指定编码 如果需要直接使用 `DataInputStream`,也可以结合 `InputStreamReader` 来设置编码: ```java import java.io.*; public class ReadCSVWithDIS { public static void main(String[] args) throws IOException { DataInputStream in = new DataInputStream(new FileInputStream("d:\\example.csv")); BufferedReader br = new BufferedReader(new InputStreamReader(in, "GBK")); // 根据实际编码调整 String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } } ``` 这种方法同样能够避免乱码问题 [^1]。 #### 3. 使用第三方库简化操作 对于更复杂的CSV文件取需求,推荐使用第三方库如 `OpenCSV`,它提供了更好的灵活性和容错能力。以下是使用 OpenCSV 的一个简单示例: 添加依赖(Maven): ```xml <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.7.1</version> </dependency> ``` 代码实现: ```java import com.opencsv.CSVReader; import java.io.FileReader; public class ReadCSVWithOpenCSV { public static void main(String[] args) throws Exception { CSVReader reader = new CSVReader(new FileReader("d:\\example.csv", Charset.forName("GBK"))); // 设置正确编码 String[] nextLine; while ((nextLine = reader.readNext()) != null) { for (String cell : nextLine) { System.out.print(cell + "\t"); } System.out.println(); } } } ``` 这种方式不仅解决了编码问题,还支持对CSV内容进行更高效的解析 [^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值