如何获得控制台charset?
如何在Windows,Linux shell或eclipse控制台输出中获取控制台(cmd.exe)charset编码? java.nio.charset.Charset.defaultCharset()
似乎只适用于输入/输出文件,而不是控制台。
一般情况下:你必须向shell询问它当前用于显示字符的字符集。
猜不知道:Java中没有标准的方法(我猜)控制台报告实际的字符集没有标准。 我们必须检测实际的操作系统或控制台提供程序 (eclipse,…)并使用它们的特定function来获取实际字符集的名称。
没有标准化的方法从系统中获取该信息。 通常它将是平台默认编码,但正如您已经注意到的那样,情况不一定(据我所知,它没有记录)。
您可以使用丑陋的路径并使用reflection来找出Java使用的编码。 以下代码完全不可移植 ,并且只经过validation可以在OpenJDK的一个特定版本上运行,它是实验而不是用于生产:
final Class extends PrintStream> 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”相同,您可以通过右键单击项目,属性和资源 – >文本文件编码来查找/更改