Netbeans 9-打印Unicode字符

时间:2018-11-12 07:45:41

标签: java netbeans utf-8 system.out netbeans-9

使用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字符的方法。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

对于使用Java 8在NetBeans 9.0中创建的Maven应用程序,需要执行三个操作才能在 Output 窗口中正确显示中文字符,您已经在做前两个操作了:

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

还应注意一些不必要的更改:

  • 由于默认字体 Monospaced 可以正常工作,因此无需在“输出”窗口中选择特定字体(工具>选项>其他>输出>字体)。如果选择不支持中文字符的其他字体(例如 Arial ),实际上可能会导致问题。
  • 无需在 {项目}>“属性”>“运行”>“ VM选项” 中指定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")返回“ Cp1252” 而不是“ UTF-8” ,汉字也会呈现: