如何获取控制台字符集?

问题描述 投票:0回答:5

如何获取控制台(windows中的cmd.exe、linux shell或eclipse控制台输出)字符集编码?

java.nio.charset.Charset.defaultCharset()
似乎仅适用于输入/输出文件,不适用于控制台。

java console
5个回答
4
投票

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

可以走丑陋的路线并使用反射来找出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 语言环境。


1
投票
一般来说:您必须询问

shell 它当前使用什么字符集来显示字符。

猜测不知道:Java 中没有标准方法,因为(我猜)控制台没有报告实际字符集的标准。我们必须检测实际的操作系统或

控制台提供者(eclipse,...)并使用它们的特定功能来获取实际字符集的名称。


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

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

0
投票
自 Java 17 起,

charset

 上有一个名为 
java.io.Console
 的方法,您可以调用该方法来获取控制台的编码。像这样使用它:

Console con = System.console(); Charset cs = con.charset();
    

-1
投票
假设您正在使用 IDE,您可能想询问您的 IDE。如果你不是,那么它就是你的 shell 使用的任何东西。如果您碰巧使用 eclipse,它将与您的“项目字符集”相同,您可以通过右键单击您的项目、属性和资源 -> 文本文件编码来查找/更改它

© www.soinside.com 2019 - 2024. All rights reserved.