如何获得控制台charset?

如何在Windows,Linux shell或eclipse控制台输出中获取控制台(cmd.exe)charset编码? java.nio.charset.Charset.defaultCharset()似乎只适用于输入/输出文件,而不是控制台。

一般情况下:你必须向shell询问它当前用于显示字符的字符集。

猜不知道:Java中没有标准的方法(我猜)控制台报告实际的字符集没有标准。 我们必须检测实际的操作系统或控制台提供程序 (eclipse,…)并使用它们的特定function来获取实际字符集的名称。

没有标准化的方法从系统中获取该信息。 通常它将是平台默认编码,但正如您已经注意到的那样,情况不一定(据我所知,它没有记录)。

可以使用丑陋的路径并使用reflection来找出Java使用的编码。 以下代码完全不可移植 ,并且只经过validation可以在OpenJDK的一个特定版本上运行,它是实验而不是用于生产:

 final Class stdOutClass = System.out.getClass(); final Field charOutField = stdOutClass.getDeclaredField("charOut"); charOutField.setAccessible(true); OutputStreamWriter o = (OutputStreamWriter) charOutField.get(System.out); System.out.println(o.getEncoding()); 

这会在我的系统上打印UTF8 [sic],这并不奇怪,因为我在Linux机器上使用UTF-8语言环境。

从JDK 1.1开始,您可以使用System out字段构造OutputStreamWriter,并调用getEncoding()。

 OutputStreamWriter osw = new OutputStreamWriter(System.out); System.out.println(osw.getEncoding()); 

可能你想问你的IDE,假设你正在使用它。 如果你不是,那就是你的shell使用的。 如果您正好使用eclipse,它将与您的“project characterset”相同,您可以通过右键单击项目,属性和资源 – >文本文件编码来查找/更改