Netbeans 9 - 打印 Unicode 字符

Netbeans 9 - Print Unicode Characters

使用 Netbeans 9:

Product Version: Apache NetBeans IDE 9.0 (Build incubator-netbeans-release-334-on-20180708)
Java: 1.8.0_181; Java HotSpot(TM) 64-Bit Server VM 25.181-b13
Runtime: Java(TM) SE Runtime Environment 1.8.0_181-b13
System: Windows 10 version 10.0 running on amd64; UTF-8; en_EN (nb)

我希望能够打印:

String text = "你好!";
System.out.println(text);

结果是:

--- exec-maven-plugin:1.5.0:exec (default-cli) @ JavaApplication1 ---
???

我已经将 -J-Dfile.encoding=UTF-8 添加到 /etc/netbeans.conf,还添加到配置中的 VM 选项。源编码选项也设置为 UTF-8。 以前的Netbeans版本没有问题,这里我发现无法显示UTF-8字符。

我该怎么做?

更新于 2021 年 9 月 8 日,注意此解决方案不适用于 NetBeans 12.x 版本。参见


对于使用 Java8 在 NetBeans 9.0 中创建的 Maven 应用程序,需要三个操作才能使中文字符在 Output window 中正确呈现,您已经在做的前两个:

  1. -J-Dfile.encoding=UTF-8添加到文件etc/netbeans.conf中的属性netbeans_default_options,然后重启NetBeans。
  2. Projects 面板设置 {project} > Properties > Sources > EncodingUTF-8.
  3. 在应用程序中调用System.setOut(new PrintStream(System.out, true, "UTF8"));使调用System.out.println()时使用的打印流支持UTF-8编码。

还值得注意的是一些不必要的更改:

  • 不需要select输出中的特定字体window(工具>选项>杂项>输出>字体)因为默认字体Monospaced 的效果很好。如果不支持中文字符,选择另一种字体实际上可能会导致问题(例如 Arial)。
  • 无需在 {project} > Properties > 运行 > VM Options.
  • 中指定 file.encoding=UTF-8
  • 无需在 pom.xml.
  • 中指定有关项目编码的任何内容

这是代码:

package com.unthreading.mavenchinesechars;

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

public class ChineseChars {

public static void main(String[] args) throws UnsupportedEncodingException {

    System.out.println("System.getProperty(\"file.encoding\"): " + System.getProperty("file.encoding"));
    System.out.println("Charset.defaultCharset(): " + Charset.defaultCharset());
    System.out.println("System.getProperty(\"java.version\"): " + System.getProperty("java.version"));
    
    String text = "你好!"; 
    System.out.println(text); // <<<======================= Fails!       
    System.setOut(new PrintStream(System.out, true, "UTF8")); // Essential!
    System.out.println(text); // <<<======================= Works!       
}
}

这是pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.unthreading</groupId>
    <artifactId>MavenChineseChars</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>

这是 NetBeans 中的输出

cd D:\NB82\MavenChineseChars; JAVA_HOME=C:\Java\jdk1.8.0_181 M2_HOME=C:\apache-maven-3.6.0 cmd /c "\"\"C:\apache-maven-3.6.0\bin\mvn.cmd\" -Dexec.args=\"-classpath %classpath com.unthreading.mavenchinesechars.ChineseChars\" -Dexec.executable=C:\Java\jdk1.8.0_181\bin\java.exe -Dmaven.ext.class.path=C:\NetBeans9\java\maven-nblib\netbeans-eventspy.jar org.codehaus.mojo:exec-maven-plugin:1.5.0:exec\""
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
Scanning for projects...

-----------------< com.unthreading:MavenChineseChars >------------------
Building MavenChineseChars 1.0-SNAPSHOT
--------------------------------[ jar ]---------------------------------

--- exec-maven-plugin:1.5.0:exec (default-cli) @ MavenChineseChars ---
System.getProperty("file.encoding"): Cp1252
Charset.defaultCharset(): windows-1252
System.getProperty("java.version"): 1.8.0_181
???
你好!
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time:  1.021 s
Finished at: 2018-12-12T18:24:12-05:00
------------------------------------------------------------------------

输出,注意:

  • 除非先调用 System.setOut(new PrintStream(System.out, true, "UTF8"));,否则中文字符无法正确呈现。
  • 尽管 System.getProperty("file.encoding") 项目 returns "Cp1252" 而不是 "UTF-8",但中文字符呈现=63=]: