Java写入特殊字符到文本文件乱码问题:替换方向符后文件显示异常
解决Java写入特殊字符到文件乱码的问题
看起来你遇到的是字符编码不匹配导致的乱码问题,我来帮你捋清楚原因和解决办法:
问题根源
你用的FileWriter默认会使用系统平台的默认字符集(比如Windows上可能是GBK,Linux/macOS是UTF-8),而控制台输出通常用的是UTF-8。当你把↑、→这些Unicode特殊字符通过FileWriter写入时,如果系统默认编码不是UTF-8,字符就会被错误编码,导致打开文件时显示成→、↑这类乱码。
修复方案
把FileWriter替换成可以指定编码的OutputStreamWriter,明确指定UTF-8编码即可。修改后的代码片段如下:
private static void print(String t){ File log = new File("a.txt"); String raw = t; raw = raw.replaceAll("Up", " ↑ "); raw = raw.replaceAll("Right", " → "); try{ // 替换FileWriter为OutputStreamWriter,指定UTF-8编码 OutputStreamWriter fileWriter = new OutputStreamWriter(new FileOutputStream(log, true), StandardCharsets.UTF_8); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write(raw); bufferedWriter.newLine(); // 按需添加换行 bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } }
额外提示
- 如果你用的是Java 7及以上版本,也可以用更简洁的
Files类方法:
try { Files.write(Paths.get("a.txt"), (raw + System.lineSeparator()).getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND); } catch (IOException e) { e.printStackTrace(); }
- 打开文件时,要确保你的文本编辑器(比如Notepad++、IDEA)也设置为UTF-8编码查看,不然即使文件编码正确,编辑器用其他编码打开还是会乱码。
内容的提问来源于stack exchange,提问作者Sapu
相关产品推荐
相关产品推荐

