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...“到处运行”?
I have a program which runs on a console and its Umlauts and other special characters are being output as ?'s on Macs. Here's a simple test program:
public static void main( String[] args ) {
System.out.println("höhößüä");
System.console().printf( "höhößüä" );
}
On a default Mac console (with default UTF-8 encoding), this prints:
h?h????
h?h????
But after manually setting the Mac terminal's encoding to "Mac OS Roman", it correctly printed
höhößüä
höhößüä
Note that on Windows systems using System.console() works:
h÷h÷▀³õ
höhößüä
So how do I make my program...rolleyes..."run everywhere"?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
启动应用程序时尝试以下命令行参数:
-Dfile.encoding=utf-8
这会更改 JVM 用于 I/O 操作的默认编码。
您还可以尝试:
Try the following command-line argument when starting your application:
-Dfile.encoding=utf-8
This changes the default encoding of the JVM for I/O operations.
You can also try:
Epaga:看看这里。您可以在打印流中设置输出编码 - 只需确定或绝对确定正在设置的编码。
要确定控制台编码,您可以使用系统命令“locale”并解析输出,在德国 UTF-8 系统上,输出如下所示:
Epaga: have a look right here. You can set the output encoding in a printstream - just have to determine or be absolutely sure about which is being set.
To determine the console encoding you could use the system command "locale" and parse the output which - on a german UTF-8 system looks like: