Java使用PrintWriter写入2-1000素数到文本文件出现乱码如何解决
问题原因
- 使用
PrintWriter(String fileName)构造方法时,程序会默认采用操作系统的原生字符集执行写入操作,不同系统的默认字符集存在差异:比如简体中文Windows系统默认是GBK,Linux、macOS系统默认是UTF-8,当写入时使用的字符集和你打开文件时编辑器采用的读取字符集不匹配时,就会出现乱码。 - 你遇到的乱码是典型的字符集/字节序不匹配场景:比如写入时实际采用了UTF-16双字节编码,但是打开文件时编辑器按单字节的GBK/ASCII规则解析,最终就会显示为异常的非预期字符。
解决方案
初始化PrintWriter时手动指定统一的字符集,避免依赖系统默认值,比如统一使用UTF-8编码写入,示例代码如下:
// Java 11及以上版本可直接使用StandardCharsets常量 PrintWriter pw = new PrintWriter("PrimeNumbersList.txt", StandardCharsets.UTF_8); for(Long l: treeSet){ pw.println(l); // 直接调用println自动追加换行,无需手动判断拼接 pw.flush(); } pw.close(); // 流使用完毕必须关闭,避免内容丢失
如果是Java 8及更早版本,也可以传入字符集字符串实现:
PrintWriter pw = new PrintWriter("PrimeNumbersList.txt", "UTF-8");
写入完成后打开文件时,将编辑器的读取编码也设置为对应的UTF-8,即可正常显示内容。
内容的提问来源于stack exchange,提问作者mps88
相关产品推荐
相关产品推荐

