问题
先说问题:
VS code控制台中文输出正常,但是输出特殊字符格式不正确,比如制表符:
String[] tabs = {"└─", " ├─"};
输入如下图:
根据一系列的实验
- 排除字符本身的code不是双字节的问题:在cmd和powershell使用指令
tree
打印目录结构,字符都能够正常显示(这个制表符是从这里复制来的,因此不存在字符本身双字节应当是可以编码的) - 排除控制台不能显示双字节的问题:中文是正常的
原因只剩下:也许String数组包含什么我不了解的底层机制,导致元素String中的双字符不能以正常格式显示
解决方法
受到这一篇 https://blog.csdn.net/a1064072510/article/details/86370142 的启发,试验了先按照GB2312解码、再按照ISO-8859-1编码回字符串的方法,发现就可以了,对比如下图:
代码为:
new String(s.getBytes("GB2312"), "ISO-8859-1");
至于为什么是GB2312,为什么是ISO-8859-1,等我有时间再研究吧,bug总算是de掉了。