Java程序输出文件出现中文乱码问题排查求助
中文乱码问题的原因及解决办法
这个中文乱码问题本质是字符编码不匹配,具体来说有两个核心原因:
- 你当前创建
PrintStream的方式,默认会采用JVM运行时的平台默认字符编码来把字符串转成字节写入文件。虽然Ubuntu 16.04的系统默认编码通常是UTF-8,但JVM可能因为环境变量配置、启动参数等原因,使用了其他编码(比如ISO-8859-1),导致中文转字节时出现编码丢失,写入文件后自然就乱码了。 - 另外,如果你的Java源代码文件本身不是以UTF-8编码保存的,编译后生成的字节码里的中文字符串可能已经是乱码状态,后续输出到文件自然也会显示异常。
快速解决方法
你只需要在创建PrintStream时显式指定UTF-8编码,强制统一编码规则,就能避免乱码问题。修改后的代码如下:
public static void main(String[] args) throws Exception { // 显式指定UTF-8编码,第二个参数true表示自动刷新缓冲区 PrintStream out = new PrintStream(new FileOutputStream("Programoutput.txt"), true, "UTF-8"); System.setOut(out); // 你的后续业务代码... }
额外建议
为了彻底避免编码问题,还可以做这两步:
- 检查并设置你的IDE/编辑器,把Java源代码文件的编码改成UTF-8;
- 编译代码时加上
-encoding UTF-8参数,比如用命令行编译时:javac -encoding UTF-8 YourMainClass.java,确保源代码中的中文在编译阶段就不会出现编码偏差。
内容的提问来源于stack exchange,提问作者Habil Ganbarli
相关产品推荐
相关产品推荐

