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
相关产品推荐
相关产品推荐

