在Windows控制台中从Java代码问题中打印出unicode

时间:2013-12-04 21:27:00

标签: java unicode encoding utf-8 cmd

我在Windows控制台中打印出unicode符号时遇到问题。

这里是打印出unicode符号值的java代码;

System.out.print("\u22A2 ");

当我在Eclipse中使用UTF-8编码设置运行程序时,问题不存在,但是当涉及到Windows控制台时,符号会被问号替换。

以下是为了尝试克服这个问题,但没有成功;

  • 将Windows控制台的字体更改为Lucida Console。

  • 每次运行Windows控制台时,我都会更改编码设置,即使用chcp 65001

我尝试了几次的额外步骤是运行带有参数的java文件,即java -Dfile.encoding=UTF-8 Filter(其中" Filter"是该类的名称)

3 个答案:

答案 0 :(得分:6)

默认情况下,在Windows的 CMD 中使用的代码页 437 。您可以通过在提示符中运行此命令进行测试:

C:\>chcp
Active code page: 437

而且,此代码页会阻止您正确显示Unicode字符!您必须将代码页更改为 65001 并使用 -Dfile.encoding = UTF-8 进行此操作。

C:\>chcp 65001
Active code page: 65001
C:\>java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar

答案 1 :(得分:4)

除了您采取的步骤之外,您还需要一个PrintStream / PrintWriter,它将打印的字符编码为UTF-8。

不幸的是,Java设计人员选择使用所谓的“默认”编码打开标准流,这种编码几乎总是在Windows下无法使用 *)。因此,天真地使用System.outSystem.err将使您的程序输出显示不同,具体取决于您运行它的位置。这与目标相反:编译一次,随处运行。

*)除了微软在这个星球上认可外,它将是一些非标准的“代码页”。而AFAIK,如果你有一个德国键盘和一个“德国”OEM Windows,你想在你的家乡时区有日期和时间,没有办法说:但我想要UTF-8输入/输出我的CMD窗口。这就是我大部分时间启动双Ubuntu的原因之一,不用说终端会使用UTF-8。

以下通常适用于JDK7:

public static PrintWriter stdout = new PrintWriter(
    new OutputStreamWriter(System.out, StandardCharsets.UTF_8),
    true);

对于古代Java版本,我将StandardCharsets.UTF_8替换为Charset.forName("UTF-8")

答案 2 :(得分:-1)

对于阿拉伯语,我使用了以下代码:

PrintWriter stdout = new PrintWriter(
new OutputStreamWriter(System.out,StandardCharsets.ISO_8859_1),true);