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

Java导入文件打印时右单引号显示异常,如何转为普通撇号?

解决Java中右单引号显示为乱码方块的问题

这个问题我之前也碰到过!你看到的don�t里的空白方块,其实是右单引号(U+2019,也就是常说的“智能引号”或弯引号),因为读取时编码不匹配,或者输出环境不支持这个特殊字符导致的乱码。下面给你两个实用的解决思路:

1. 确保用正确的编码读取文件

大部分时候乱码的根源是:你用了JVM默认编码(比如Windows下的GBK)读取了UTF-8编码的文件,或者反过来。解决方法是读取文件时显式指定编码(比如UTF-8),不要依赖默认的FileReader(它会用系统默认编码)。

修改你的读取代码,改用InputStreamReader并指定编码:

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

public class Somethingsomething { 
    public static void main(String[] args) throws FileNotFoundException, IOException { 
        ArrayList<String> list = new ArrayList<>();
        // 显式指定UTF-8编码读取文件
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(new FileInputStream("your-file-path.txt"), StandardCharsets.UTF_8))) {
            String line;
            while ((line = reader.readLine()) != null) {
                list.add(line);
                // 打印测试
                System.out.println(line);
            }
        }
    }
}

提示:如果不知道文件的实际编码,可以用Notepad++打开文件,查看右下角的编码标识(比如UTF-8、GBK等),然后把代码里的编码改成对应的即可。

2. 将特殊右单引号替换为普通撇号

如果文件里确实存在这种智能引号,你可以在读取后把它统一替换成普通的单撇号(U+0027),这样不管输出环境是什么,都能正常显示。

在读取每行后添加替换逻辑:

String line = reader.readLine();
if (line != null) {
    // 把右单引号(\u2019)替换成普通撇号(')
    line = line.replace('\u2019', '\'');
    list.add(line);
    System.out.println(line);
}

另外,如果你还遇到左单引号(U+2018)或者其他智能引号,也可以一起替换:

line = line.replace('\u2018', '\'')  // 左单引号
           .replace('\u2019', '\'')  // 右单引号
           .replace('\u201C', '"')   // 左双引号
           .replace('\u201D', '"');  // 右双引号

额外注意:输出环境的编码

如果替换后还是显示乱码,可能是控制台的编码不支持。比如在IDEA里,可以在Run Configuration的VM options里添加:

-Dfile.encoding=UTF-8

强制控制台用UTF-8编码输出,这样特殊字符也能正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:44:27