我尝试了以下方法:

System.out.println("rājshāhi");
new PrintWriter(new OutputStreamWriter(System.out), true).println("rājshāhi");
new PrintWriter(new OutputStreamWriter(System.out,"UTF-8"), true).println("rājshāhi");
new PrintWriter(new OutputStreamWriter(System.out,"ISO-8859-1"), true).println("rājshāhi");

产生以下输出:

r?jsh?hi

r?jsh?hi

r??jsh??hi

r?jsh?hi

那么,我在做什么错呢?

谢谢。

附言

我在Windows 7上使用Eclipse Indigo。输出进入Eclipse输出控制台。

Java文件必须正确编码。查看该文件的属性,并正确设置编码:

JAVAFX 打印控制台信息 java如何打印到控制台_文本文件

这是正确的答案。 确认!

确实有效。

控制台输出使用为文件定义的编码。 因此,即使您的程序正确,控制台输出也可能显示乱码。 不要使用控制台输出。 尝试使用正确的编码将其写入文件,然后在任何文本查看器中检查结果。 希望这可以帮助

如果您使用的是最新版本的eclipse,则即使您执行的操作也应该有效,即使是简单的System.out.println也可以。

请看以下内容:

您正在使用的eclipse版本

文件是否正确编码。参见@Matthew的答案。我认为是这样,因为否则eclipse不允许您保存文件(会警告"不支持的字符")

控制台的字体(Windows -> Preferences -> Fonts -> Default Console Font)

将文本保存到文件时,是否正确获取字符

JAVAFX 打印控制台信息 java如何打印到控制台_文本文件_02

我非常确定它与JVM使用的默认编码有关,即系统默认值。 因此,它对您的效果很好的事实可能与为什么不对OP起作用没有直接关系。 (请参阅此答案)

@kentcdodds可能不仅是JVM默认编码(而且绝对有可能)。 我遇到了Java类未保存在正确编码文件中的情况。 这就是为什么我要求OP尝试保存到文件(而不是打印到控制台)的原因

实际上,复制您的代码并在我的计算机上运行它可以为我提供以下输出:

rājshāhi

rājshāhi

rājshāhi

r?jsh?hi

看起来除最后一行外,所有行都有效。获取您的系统默认字符集(请参阅此答案)。我的是UTF-8。查看更改默认字符集是否有所不同。

以下几行将获取您的默认字符集:

System.out.println(System.getProperty("file.encoding"));

System.out.println(Charset.defaultCharset());

要更改默认编码,请参见此答案。

您能告诉我要执行的确切Java命令吗?

@mark查看我的修改。

使用最新的Eclipse版本有助于我在控制台上实现UTF-8编码

我使用了Luna版本的Eclipse并设置了Properties-> Info-> Others-> UTF-8

确保在创建类时分配文本文件编码值UTF-8。

一旦以后使用任何其他文本文件编码创建了一个类,即使日食允许您无法反映,您也无法更改"编码"样式。

因此,使用TextFile Encoding UTF 8创建一个新类。

编辑:在您的情况下,尽管您尝试以编程方式添加文本文件编码,但它不会对容器继承的编码产生任何影响(Cp1252)