You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BufferedReader/FileReader无法正确读取右双引号(”)问题排查

解决Java读取含全角引号文件时的乱码问题

这明显是字符编码不匹配导致的问题——你的程序在读写文件时依赖了系统默认编码,而包含全角引号(”)的文件实际编码和默认编码不一致,导致字符被错误解析成陌生的乱码。

问题根源

Java里的FileReader和FileWriter类会自动使用系统默认字符编码(比如Windows下是GBK,Linux/macOS下是UTF-8)来处理文件。如果你的input.txt是用UTF-8编码保存的,但程序用GBK去读取,或者反过来,就会出现字符编码转换错误,把原本的全角引号变成奇怪的亚洲字符。

解决方案:显式指定UTF-8编码读写文件

修改你的代码,改用InputStreamReader和OutputStreamWriter,并明确指定编码为UTF-8,这样不管系统默认编码是什么,都能稳定处理包含特殊字符的文件。

示例代码如下:

import java.io.*;

public class FileProcessor {
    public static void main(String[] args) {
        String inputPath = "input.txt";
        String outputPath = "processed_input.txt"; // 建议先输出到新文件,确认后再覆盖原文件

        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(new FileInputStream(inputPath), "UTF-8"));
             BufferedWriter writer = new BufferedWriter(
                     new OutputStreamWriter(new FileOutputStream(outputPath), "UTF-8"))) {

            String line;
            while ((line = reader.readLine()) != null) {
                // 移除连续空格,readLine已经自动去掉了换行符
                String processedLine = line.replaceAll("\\s+", " ");
                writer.write(processedLine);
                // 如果需要保留原文件的行结构,可以在这里加writer.newLine();
            }

            System.out.println("文件处理完成,结果已保存到 " + outputPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

额外注意事项

  • 确保你的input.txt本身是用UTF-8编码保存的(比如用记事本保存时选择“UTF-8”,不要选默认的ANSI)
  • 如果需要覆盖原文件,建议先备份,避免数据丢失
  • 要是不确定文件的编码,可以用Notepad++这类编辑器查看文件的编码格式

内容的提问来源于stack exchange,提问作者JHam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:15:15