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
相关产品推荐
相关产品推荐

