System.out字符编码

21

我正在Windows 7命令行中运行我的Java程序。为了简化问题,我只描述相关部分。

public static void main(String[] args) {
    System.out.println("Árpád");
}

我的输出很糟糕。显然是一个字符编码问题,匈牙利语中的Á和á字符没有正确显示。我已尝试以下方法:

public static void main(String[] args) {
    PrintStream ps = new PrintStream(System.out, true, "UTF-8");
    ps.println("Árpád");
}

但我的输出仍然是垃圾。我该如何解决Windows 7命令行中的字符编码问题?谢谢。


1
你确定这不是编译问题吗?你是如何编译的,源代码使用的是什么编码? - Jon Skeet
1
你的显示器是否支持显示这些字符?也就是说,你在键盘上输入这些字符时,它们能够正确地显示在屏幕上吗? - fge
是的,我的显示器支持显示这些字符,而且我可以正确地输入我的字符。如果我从 NetBeans 运行我的程序,它可以正确地显示输出。我只有在命令行中显示结果时才会遇到问题。这个项目将被客户从命令行使用,他们可能会有匈牙利的结果。 - Lajos Arpad
1
你能测试一下 Cp852 编码是否有帮助吗?在我(波兰)的Win7控制台版本中,它可以正常工作。 - Pshemo
运行chcp 852后,我的输出仍然相同。我猜这种编码对波兰字符很好,但不适合匈牙利字符。不管怎样,感谢你的建议。 - Lajos Arpad
显示剩余2条评论
1个回答

19

我找到了你的代码,并通过从命令行中找到正确的编码方式使其正常运行,然后使用具有该编码方式的PrintStream版本,或者在命令行上指定编码方式并只使用System.out.println

要在命令行上找到编码方式,请运行chcp。这是我得到的输出:

Active code page: 850

对应的Java字符集名称为"IBM850"。因此,这将在命令行上创建正确的输出:

java -Dfile.encoding=IBM850 Test

@LajosArpad:对我来说两者都可以——你的控制台使用哪个代码页? - Jon Skeet
默认使用的是437编码。我尝试将其更改为850和852,但不幸的是结果是不正确的。 - Lajos Arpad
@LajosArpad:从http://en.wikipedia.org/wiki/Code_page_437看来,我怀疑它可能不支持你所需的所有字符:(在Windows中可能可以在其他地方设置-这不是我曾经做过的事情... - Jon Skeet
如何在UNIX中执行相同的操作。我在命令提示符中执行它,对我来说很好用。 - user1912935
如果编码受支持,完全相同的命令行应该可以正常工作。 - Jon Skeet
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接