Java: How to detect (and change?) encoding of System.console?(Java:如何检测(和更改?) System.console 的编码?)
问题描述
我有一个在控制台上运行的程序,它的元音变音和其他特殊字符在 Mac 上输出为?这是一个简单的测试程序:
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ößüä" );
}
在默认的 Mac 控制台(使用默认的 UTF-8 编码)上,会打印:
On a default Mac console (with default UTF-8 encoding), this prints:
h?h????
h?h????
但是手动设置Mac终端的编码为Mac OS Roman"后,打印正确
But after manually setting the Mac terminal's encoding to "Mac OS Roman", it correctly printed
höhößüä
höhößüä
请注意,在 Windows 系统上使用 System.console() 有效:
Note that on Windows systems using System.console() works:
h÷h÷▀³õ
höhößüä
那么我该如何让我的程序...rolleyes...到处运行"?
So how do I make my program...rolleyes..."run everywhere"?
推荐答案
Epaga: 看看吧这里.您可以在打印流中设置输出编码 - 只需确定或绝对确定要设置的编码.
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.
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
public class Test {
public static void main (String[] argv) throws UnsupportedEncodingException {
String unicodeMessage =
"u7686u3055u3093u3001u3053u3093u306bu3061u306f";
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(unicodeMessage);
}
}
要确定控制台编码,您可以使用系统命令locale"并解析输出 - 在德国 UTF-8 系统上,如下所示:
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:
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=
这篇关于Java:如何检测(和更改?) System.console 的编码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java:如何检测(和更改?) System.console 的编码?
基础教程推荐
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01