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

我有一个程序在控制台上运行,它的变音符号和其他特殊字符在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"));