Java:如何检测(并更改?)System.console的编码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我有一个在控制台上运行的程序,它的变音和其他特殊字符正在Mac上输出。这是一个简单的测试程序:

public static void main( String[] args ) {
    System.out.println("höhößüä");
    System.console().printf( "höhößüä" );
}

在默认的Mac控制台(使用默认的UTF-8编码)下,将打印:

 h?h????
 h?h????

但是,在手动将Mac终端的编码设置为“Mac OS Roman”之后,它将正确打印

 höhößüä
 höhößüä

请注意,在使用System.console()的Windows系统上工作:

 h÷h÷▀³õ
 höhößüä

那么,我该如何制作我的节目... rolleyes ......“无处不在”?

提问于
用户回答回答于

Epaga:看看这里。您可以在输出流中设置输出编码 - 只需确定或确定要设置哪个编码即可。

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

public class Test {
    public static void main (String[] argv) throws UnsupportedEncodingException {
    String unicodeMessage =
    "\u7686\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f";

    PrintStream out = new PrintStream(System.out, true, "UTF-8");
    out.println(unicodeMessage);
  }
}

要确定控制台编码,可以使用系统命令“locale”并解析输出 - 在德国UTF-8系统上看起来像:

LANG="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_ALL=
用户回答回答于

启动应用程序时,请尝试以下命令行参数:

-Dfile.encoding=utf-8

这将更改JVM的I / O操作的默认编码。

你也可以尝试:

System.setOut(new PrintStream(System.out, true, "utf-8"));

扫码关注云+社区