2 回答
TA贡献1815条经验 获得超6个赞
这是活动代码页的问题。具体来说65001是一个问题和流行的问题,所以我最好的猜测是这就是正在使用的问题,但稍后请参阅链接以获取一些选择。
在窗户上:
> java --version
java 11.0.1 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
使用检查活动代码页chcp。如果它被设置为65001(也许你一直在玩这个 hack 来让 utf-8 字符显示在你的终端上)这个问题是可靠地重现的。
> chcp 65001
Active code page: 65001
> jshell
| Welcome to JShell -- Version 11.0.1
| For an introduction type: /help intro
jshell>TypeAnything<backspace>Exception in thread "main" java.lang.NullPointerException: charsetName
at java.base/java.lang.String.<init>(String.java:464)
at ...
解决方案
从https://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html中挑选,但chcp 850应该可以解决问题。
> chcp 850 && jshell
Active code page: 850
| Welcome to JShell -- Version 11.0.1
| For an introduction type: /help intro
jshell> TypeAnything<backspace>
特定于 PowerShell
想法是一样的(更改控制台编码),但命令略有不同。同样的想法是改变编码。查看当前代码页[Console]::OutputEncoding.CodePage,我们希望将其切换为列表中的一个850。
> [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(850)
> jshell
添加回答
举报