javanetbeansutf-8system.outnetbeans-9

Netbeans 9 - Print Unicode Characters


With 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)

I want to be able to print:

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

The result is instead:

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

I already added -J-Dfile.encoding=UTF-8 to the /etc/netbeans.conf, added also to the VM options in configuration. Sources encoding option also set to UTF-8. No problems with the past versions of Netbeans, here I found no way to display UTF-8 characters.

Which way can I do?


Solution

  • Updated on 9/8/21 to note that this solution does not work with NetBeans 12.x releases. See NetBeans 12 UTF-8 Chinese output with Maven projects


    For a Maven application created in NetBeans 9.0 using Java 8 there are three actions needed to get Chinese characters to render correctly in the Output window, the first two of which you were already doing:

    1. Add -J-Dfile.encoding=UTF-8 to the property netbeans_default_options in file etc/netbeans.conf, and then restart NetBeans.
    2. From the Projects panel set {project} > Properties > Sources > Encoding to UTF-8.
    3. In the application call System.setOut(new PrintStream(System.out, true, "UTF8")); so that the print stream used when calling System.out.println() supports UTF-8 encoding.

    It's also worth noting some changes that are not necessary:

    This is the code:

    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!       
    }
    }
    

    This is 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>
    

    This is the Output in 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
    ------------------------------------------------------------------------
    

    From the Output, note that: