You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何正确解析转义序列 读取文件输出乱码无法显示彩色文本

问题修复方案

导致乱码和无法显示彩色的核心原因有两个:

  • 你用的FileReader默认读取编码是系统默认编码(Windows下为GBK),如果你的into.txt是UTF-8编码就会直接出现解码乱码
  • 文件中存储的如果是Unicode转义的字面量(比如直接存了\u001b这类字符),直接输出不会被解析为实际的控制字符,同时默认Windows终端不开启ANSI转义支持,也无法渲染颜色

修复后代码

你可以直接用以下代码替换原有逻辑,依赖Apache Commons-Lang包处理转义(如果不想引入第三方依赖可以自行实现转义解析逻辑):

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.apache.commons.lang3.StringEscapeUtils;

public class Main {
    public static void main(String[] args) throws IOException {
        // 明确指定UTF-8编码读取,避免编码不匹配
        BufferedReader br = Files.newBufferedReader(
            Paths.get("C:\\Users\\gabri\\IdeaProjects\\Atlas\\into.txt"),
            StandardCharsets.UTF_8
        );
        String line;
        while ((line = br.readLine()) != null) {
            // 解析字符串中的Java转义序列,把\u开头的字面量转成实际字符
            String parsedLine = StringEscapeUtils.unescapeJava(line);
            System.out.println(parsedLine);
        }
        br.close();
    }
}

终端适配操作(Windows系统必做)

Win10及以上版本默认关闭ANSI转义序列支持,需要手动开启才能显示彩色:

  • 按下Win+R输入regedit打开注册表
  • 定位到路径HKEY_CURRENT_USER\Console
  • 右侧新建DWORD(32位)值,命名为VirtualTerminalLevel,数值设置为1
  • 重启终端后运行代码即可看到彩色效果

内容的提问来源于stack exchange,提问作者user12991066

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:18:04