如何获取控制台(windows中的cmd.exe、linux shell或eclipse控制台输出)字符集编码?
java.nio.charset.Charset.defaultCharset()
似乎仅适用于输入/输出文件,不适用于控制台。
没有标准化的方法可以从系统中获取该信息。 通常它将是平台默认编码,但正如您所注意到的,情况不一定如此(据我所知,它没有记录)。
你可以走丑陋的路线并使用反射来找出Java使用的编码。以下代码完全不可移植,并且仅经过验证可在 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
[原文如此],这并不奇怪,因为我在 Linux 计算机上使用 UTF-8 语言环境。
shell 它当前使用什么字符集来显示字符。
猜测不知道:Java 中没有标准方法,因为(我猜)控制台没有报告实际字符集的标准。我们必须检测实际的操作系统或控制台提供者(eclipse,...)并使用它们的特定功能来获取实际字符集的名称。
OutputStreamWriter osw = new OutputStreamWriter(System.out);
System.out.println(osw.getEncoding());
charset
上有一个名为
java.io.Console
的方法,您可以调用该方法来获取控制台的编码。像这样使用它:
Console con = System.console();
Charset cs = con.charset();