首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:如何检测(和更改?)System.console的编码?

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

Stack Overflow用户
提问于 2010-03-10 17:05:46
回答 2查看 24.2K关注 0票数 17

我有一个在控制台上运行的程序,它的Umlauts和其他特殊字符在Mac上输出为?下面是一个简单的测试程序:

代码语言:javascript
复制
public static void main( String[] args ) {
    System.out.println("höhößüä");
    System.console().printf( "höhößüä" );
}

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

代码语言:javascript
复制
 h?h????
 h?h????

但是在手动将Mac终端的编码设置为"Mac OS Roman“之后,它被正确地打印出来了

代码语言:javascript
复制
 höhößüä
 höhößüä

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

代码语言:javascript
复制
 h÷h÷▀³õ
 höhößüä

那么我如何让我的program...rolleyes...“到处运行”呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-10 17:10:30

埃帕加:看看吧,here。您可以在打印流中设置输出编码-只需确定或绝对确定要设置的是哪种编码。

代码语言:javascript
复制
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系统上如下所示:

代码语言:javascript
复制
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=
票数 10
EN

Stack Overflow用户

发布于 2010-03-10 17:15:48

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

-Dfile.encoding=utf-8

这会更改JVM用于I/O操作的默认编码。

您还可以尝试:

代码语言:javascript
复制
System.setOut(new PrintStream(System.out, true, "utf-8"));
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2415597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档