我正在使用Netbeans6.9.1集成开发环境,想在Java中输出控制台中显示中文字符。我从网页上复制了中文字符并粘贴到""之间,但是不支持。
String char1="世界你好"; System.out.println(char1);
我需要在IDE中进行一些设置还是在我的Java代码中使用一些设置?
编辑位于NetBeans安装目录下的etc
文件夹中的netbeans.conf
文件。
在netbeans_default_options
选项中添加-J-Dfile.encoding=UTF-8
,适用于NetBeans中的控制台输入和输出。
你可以试试这个:
String char1="\u4e16\u754c\u4f60\u597d";
System.out.println(char1);
转义序列通过 javac 编译器解析为相应的 Unicode 代码点,这样您就不受实际源代码编码的限制了。剩下的显示问题可能是由控制台或不完整的字体引起的。
PS:在我的 Netbeans 安装(Ubuntu Linux 上的 7.0 M2)中,这两个字符串大多数情况下都可以工作,除了第三个字符以外,它会显示为一个方框。
这个答案及其相关评论中推荐使用以下方法:
-J-Dfile.encoding=UTF-8
-Dfile.encoding=UTF-8
在过去,当我使用旧版本的NetBeans和旧版本的Java(例如Java 11和13)时,在使用NetBeans输出窗口时,这种方法非常有效。
然而,对于Java 17及更高版本,它已经不再适用了。
相反,您可以遵循以下准则 - 但需要注意以下事项:
注意事项:
请确保在项目属性 > 构建 > 编译 > Java平台 中实际使用了Java 17。
您需要这两个:
-J-Dsun.stdout.encoding=UTF-8
-Dsun.stdout.encoding=UTF-8
如果您正在使用Maven,则可以选择设置以下Maven选项:
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
这与我上面链接的答案类似,不同的是它不使用:
file.encoding=UTF-8
您现在正在使用:
sun.stdout.encoding=UTF-8
这与Java 17相同,但当然需要相应更改Java平台(以及如果相关的话,Maven设置)。
不要使用这个:
sun.stdout.encoding=UTF-8
stdout.encoding=UTF-8
具体来说,这意味着:
-J-Dstdout.encoding=UTF-8
-Dstdout.encoding=UTF-8
(如果相关,请更改您的Maven设置。)
我认为sun.stdout.encoding=UTF-8
仍然有效,但我认为stdout.encoding=UTF-8
更合适,因为应该通常避免使用sun
设置(仅限内部使用)。 我不知道它们在底层是否以相同的方式工作。 根据UTF-8 by Default JEP,sun.stdout.encoding
是“未指定和不受支持的”。
我找不到任何关于新的 stdout.encoding
官方文档,除了在 这个 OpenJDK 票证 中提到它。所以,也许即将发布的 Java 国际化指南 版本将会讨论它(但在当前版本的该指南中没有提到)。
更新 - 我在 Java 19 JavaDoc 的 System.getProperties()
中找到了有关 stdout.encoding
的参考。
不要忘记 STDERR
对于Java 19,您还可以在项目属性>运行>VM选项中添加以下内容:
-Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
netbeans.conf
文件中添加-J-Dstderr.encoding=UTF-8
,只要你有-J-Dstdout.encoding=UTF-8
就可以了。
netbeans.conf在哪里?
您可以在NetBeans安装的子目录中找到它。在Windows上,这通常是:
C:\Program Files\NetBeans-16\netbeans\etc\netbeans.conf
请确保在(冗长的)netbeans_default_options="..."
字符串的结尾处,将-J-D...
选项添加到闭合双引号内。同时,请确保在字符串中包含一个空格以将此新选项与前一个选项分隔开。
每次更改netbeans.conf后,请始终重新启动NetBeans。
Windows 命令行
毫无疑问,这已经在其他地方有所涉及 - 但如果你想在 Windows CMD shell 中正确查看 UTF-8 输出,则可以使用 Windows chcp
命令:
chcp 65001
对我而言,缺省值是437
- 适用于Windows-1252 (也被称为IBM437和其他别名)。
您可以在此处查看标识符列表。
更多细节
您可以在各种NetBeans票证中看到更详细的讨论,包括(但不限于):
这个话题似乎永远不会过时。
您需要查看控制台使用的字符编码。尽管我的控制台运行良好。
另一件要检查的事情是实现的类文件所使用的字符编码。
项目属性|源|编码
将其设置为UTF8。