IntelliJ IDEA控制台无法正确显示垂直制表符(U+000B)求助
IntelliJ IDEA控制台无法正确渲染垂直制表符(U+000B)的解决办法
问题详情
环境:IntelliJ IDEA 2023.3.4(旗舰版)、Windows 10
执行以下Java代码:
public class Example { public static void main(String[] args) { System.out.println("Line 1\u000BLine 2\u000BLine 3"); } }
实际输出:
Line 1Line 2Line 3
预期输出:
Line 1
Line 2
Line 3
已尝试的操作:
- 在
Help->Edit Custom VM Options中添加编码配置:-Dconsole.encoding=UTF-8 -Dfile.encoding=UTF-8 - 确认文件编码为UTF-8
- 检查运行配置(Edit Configuration)
可行解决方案
1. 直接替换垂直制表符为缩进格式
IntelliJ内置控制台和Windows原生终端对U+000B的渲染支持普遍有限,最简单的方式是在代码中将垂直制表符替换为换行+对应缩进空格:
public class Example { public static void main(String[] args) { String output = "Line 1\u000BLine 2\u000BLine 3" .replace("\u000B", "\n "); System.out.println(output); } }
2. 启用终端模拟模式
在IntelliJ的运行配置中开启终端模拟,让程序调用Windows原生终端(cmd/PowerShell)执行,原生终端对特殊字符的渲染更符合预期:
- 打开
Edit Configurations,找到对应的Java运行配置 - 切换到
Configuration标签页,勾选Emulate terminal in output console选项 - 重新运行程序
3. 自定义输出流处理特殊字符
如果需要保留原始字符的同时实现预期渲染,可以通过自定义输出流拦截U+000B并转换为缩进格式:
import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; public class Example { public static void main(String[] args) { PrintStream originalOut = System.out; // 包装输出流,处理垂直制表符 System.setOut(new PrintStream(new FilterOutputStream(originalOut) { @Override public void write(int b) throws IOException { if (b == 0x0B) { // 匹配U+000B originalOut.write("\n ".getBytes()); } else { super.write(b); } } })); System.out.println("Line 1\u000BLine 2\u000BLine 3"); System.setOut(originalOut); // 恢复原始输出流 } }
内容的提问来源于stack exchange,提问作者happy
相关产品推荐
相关产品推荐

