Java程序如何将字符串特殊符号打印到TXT文件?解决输出乱码问题
解决Java输出重定向到文件时特殊字符乱码的问题
这个乱码问题本质是Java输出的编码和文件系统/重定向时使用的编码不匹配导致的。你看到的↑这类乱码,其实是UTF-8编码的箭头字符被当成了ISO-8859-1(或者系统默认的非UTF-8编码)解析造成的。下面给你几个可行的解决方案:
方案1:运行程序时强制指定输出编码
直接在启动命令里添加-Dfile.encoding=UTF-8参数,让Java用UTF-8编码输出内容,这样重定向到文件后就能正确显示箭头了:
java -Dfile.encoding=UTF-8 -jar Server.jar > a.txt
方案2:在代码中显式指定输出流的编码
如果不想修改启动命令,也可以在代码里直接控制输出的编码,替换默认的System.out为指定UTF-8的PrintStream:
import java.io.IOException; import java.io.PrintStream; // 假设这是你的代码逻辑 public class Server { public static void main(String[] args) throws IOException { // 读取输入(这里你的dstream需要正确初始化) String raw = dstream.readLine(); raw = raw.replaceAll("Up"," ↑ "); raw = raw.replaceAll("Right"," → "); // 创建指定UTF-8编码的输出流 PrintStream utf8Out = new PrintStream(System.out, true, "UTF-8"); utf8Out.println(raw); } }
如果你的需求是直接写入文件而不是依赖命令行重定向,也可以直接用PrintStream写入文件:
PrintStream fileOut = new PrintStream("a.txt", "UTF-8"); fileOut.println(raw); fileOut.close();
方案3:调整系统控制台/文件系统的默认编码(不推荐)
比如在Windows系统,控制台默认编码是GBK,你可以先执行chcp 65001切换到UTF-8编码,再运行程序重定向:
chcp 65001 java -jar Server.jar > a.txt
不过这种方法依赖系统环境,跨平台兼容性差,优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者Sapu
相关产品推荐
相关产品推荐

