如何在Netbeans中使用UTF-8字符

9

我正在使用Netbeans6.9.1集成开发环境,想在Java中输出控制台中显示中文字符。我从网页上复制了中文字符并粘贴到""之间,但是不支持。

         String char1="世界你好";
         System.out.println(char1);

我需要在IDE中进行一些设置还是在我的Java代码中使用一些设置?


你有没有找到解决方案? - theyuv
5个回答

8

编辑位于NetBeans安装目录下的etc文件夹中的netbeans.conf文件。

netbeans_default_options选项中添加-J-Dfile.encoding=UTF-8,适用于NetBeans中的控制台输入和输出。


1
我发现有必要在netbeans.conf文件中添加-J-Dfile.encoding=UTF-8,并确保我的Java程序使用jre参数-Dfile.encoding=UFT-8执行。我正在使用Maven运行我的项目。(在Properties/Run/VM Options下进行编辑。)如果您使用的是Maven,则可能只需要执行第二步。 - Enwired
@Enwired,我确认你描述的步骤解决了一些字符集问题 - NetBeans 12 - JRr

1

你可以试试这个:

String char1="\u4e16\u754c\u4f60\u597d";
System.out.println(char1);

转义序列通过 javac 编译器解析为相应的 Unicode 代码点,这样您就不受实际源代码编码的限制了。剩下的显示问题可能是由控制台或不完整的字体引起的。

PS:在我的 Netbeans 安装(Ubuntu Linux 上的 7.0 M2)中,这两个字符串大多数情况下都可以工作,除了第三个字符以外,它会显示为一个方框。


1

2023年1月 - 更新Java的新版本(17、18、19)

这个答案及其相关评论中推荐使用以下方法:

  • NetBeans配置:-J-Dfile.encoding=UTF-8
  • Java虚拟机选项:-Dfile.encoding=UTF-8

在过去,当我使用旧版本的NetBeans和旧版本的Java(例如Java 11和13)时,在使用NetBeans输出窗口时,这种方法非常有效。

然而,对于Java 17及更高版本,它已经不再适用了。

相反,您可以遵循以下准则 - 但需要注意以下事项:

注意事项:

  • 我正在使用 Windows(10 和 11),其中操作系统默认代码页为 Windows-1252。如果您使用的是不同的操作系统,则可能会有所不同。
  • 我正在使用 NetBeans 16(目前最新版本)。
  • 我的所有测试都是使用 Eclipse Adoptium 的 Java 版本进行的(17、18 和 19)。
  • 我特别针对的是 NetBeans 输出窗口(而不是命令行或终端)。
  • 我的 NetBeans 输出窗口使用的是等宽字体 12 号字体(请参见 NetBeans 选项 > 杂项 > 输出)。没有必要使用可能不支持您想要打印的 Unicode 字符的字体 - 因此,请不要忘记检查该设置。

针对Java 17

请确保在项目属性 > 构建 > 编译 > Java平台 中实际使用了Java 17。

您需要这两个:

  • netbeans.conf(见下文):-J-Dsun.stdout.encoding=UTF-8
  • 项目属性 > 运行 > VM选项:-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 18

这与Java 17相同,但当然需要相应更改Java平台(以及如果相关的话,Maven设置)。


Java 19

不要使用这个:

sun.stdout.encoding=UTF-8

使用这个:
stdout.encoding=UTF-8

具体来说,这意味着:

  • netbeans.conf(见下文):-J-Dstdout.encoding=UTF-8
  • 项目属性 > 运行 > VM 选项:-Dstdout.encoding=UTF-8

(如果相关,请更改您的Maven设置。)

我认为sun.stdout.encoding=UTF-8仍然有效,但我认为stdout.encoding=UTF-8更合适,因为应该通常避免使用sun设置(仅限内部使用)。 我不知道它们在底层是否以相同的方式工作。 根据UTF-8 by Default JEPsun.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票证中看到更详细的讨论,包括(但不限于):

这个话题似乎永远不会过时。


NetBeans 17似乎没有VM选项。 - robert trudel
@roberttrudel - 如果您正在使用普通的Java应用程序,则NetBeans 17确实具有“运行> VM选项”。如果您正在使用Web应用程序,则不会有-因为在这种情况下,VM选项必须添加到您正在使用的任何容器中(Tomcat,Firefly等)。也许这就是您没有看到VM选项的原因?否则,这可能是一个很好的新问题,您可以提出。 - andrewJames

0

您需要查看控制台使用的字符编码。尽管我的控制台运行良好。

另一件要检查的事情是实现的类文件所使用的字符编码。

项目属性|源|编码

将其设置为UTF8。


这对我没用。我一直无法在Netbeans中显示这些字符的代码。✰☆★☞☛❸➂❤♡✉我的项目设置为UTF8。即使是“Courier New”,它也对我没用,尽管在Notepad++中使用这些相同的字符可以。我仍然无法弄清楚这个问题。 - Ryan
我终于在这里正式提出了一个问题:https://dev59.com/b5fga4cB1Zd3GeqPAL3F - Ryan

0

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