don*_*nea 2 java netbeans utf-8 system.out netbeans-9
使用 Netbeans 9:
\n\nProduct Version: Apache NetBeans IDE 9.0 (Build incubator-netbeans-release-334-on-20180708)\nJava: 1.8.0_181; Java HotSpot(TM) 64-Bit Server VM 25.181-b13\nRuntime: Java(TM) SE Runtime Environment 1.8.0_181-b13\nSystem: Windows 10 version 10.0 running on amd64; UTF-8; en_EN (nb)\nRun Code Online (Sandbox Code Playgroud)\n\n我希望能够打印:
\n\nString text = "\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81";\nSystem.out.println(text);\nRun Code Online (Sandbox Code Playgroud)\n\n结果是:
\n\n--- exec-maven-plugin:1.5.0:exec (default-cli) @ JavaApplication1 ---\n???\nRun Code Online (Sandbox Code Playgroud)\n\n我已经添加-J-Dfile.encoding=UTF-8到了配置/etc/netbeans.conf中,还添加到了VM选项中。Sources 编码选项也设置为 UTF-8。\n过去版本的 Netbeans 没有问题,这里我发现无法显示 UTF-8 字符。
我可以采取什么方式呢?
\n于 2021 年 9 月 8 日更新,注意此解决方案不适用于 NetBeans 12.x 版本。请参阅Maven 项目的 NetBeans 12 UTF-8 中文输出
\n对于使用 Java 8 在 NetBeans 9.0 中创建的 Maven 应用程序,需要执行三个操作才能在“输出”窗口中正确呈现中文字符,其中前两个操作您已经执行过:
\n-J-Dfile.encoding=UTF-8中的属性,然后重新启动 NetBeans。netbeans_default_optionsSystem.setOut(new PrintStream(System.out, true, "UTF8"));使调用时使用的打印流System.out.println()支持UTF-8编码。还值得注意的是一些不必要的更改:
\nfile.encoding=UTF-8在{project} > Properties > Run > VM Options中指定。这是代码:
\npackage com.unthreading.mavenchinesechars;\n\nimport java.io.PrintStream;\nimport java.io.UnsupportedEncodingException;\nimport java.nio.charset.Charset;\n\npublic class ChineseChars {\n\npublic static void main(String[] args) throws UnsupportedEncodingException {\n\n System.out.println("System.getProperty(\\"file.encoding\\"): " + System.getProperty("file.encoding"));\n System.out.println("Charset.defaultCharset(): " + Charset.defaultCharset());\n System.out.println("System.getProperty(\\"java.version\\"): " + System.getProperty("java.version"));\n \n String text = "\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81"; \n System.out.println(text); // <<<======================= Fails! \n System.setOut(new PrintStream(System.out, true, "UTF8")); // Essential!\n System.out.println(text); // <<<======================= Works! \n}\n}\nRun Code Online (Sandbox Code Playgroud)\n这是pom.xml:
\n<?xml version="1.0" encoding="UTF-8"?>\n<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">\n <modelVersion>4.0.0</modelVersion>\n <groupId>com.unthreading</groupId>\n <artifactId>MavenChineseChars</artifactId>\n <version>1.0-SNAPSHOT</version>\n <packaging>jar</packaging>\n <properties>\n <maven.compiler.source>1.8</maven.compiler.source>\n <maven.compiler.target>1.8</maven.compiler.target>\n </properties>\n</project>\nRun Code Online (Sandbox Code Playgroud)\n这是NetBeans 中的输出:
\ncd 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\\""\nRunning 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.\nScanning for projects...\n\n-----------------< com.unthreading:MavenChineseChars >------------------\nBuilding MavenChineseChars 1.0-SNAPSHOT\n--------------------------------[ jar ]---------------------------------\n\n--- exec-maven-plugin:1.5.0:exec (default-cli) @ MavenChineseChars ---\nSystem.getProperty("file.encoding"): Cp1252\nCharset.defaultCharset(): windows-1252\nSystem.getProperty("java.version"): 1.8.0_181\n???\n\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81\n------------------------------------------------------------------------\nBUILD SUCCESS\n------------------------------------------------------------------------\nTotal time: 1.021 s\nFinished at: 2018-12-12T18:24:12-05:00\n------------------------------------------------------------------------\nRun Code Online (Sandbox Code Playgroud)\n从输出中,请注意:
\nSystem.setOut(new PrintStream(System.out, true, "UTF8"));除非首先调用,否则中文字符无法正确呈现。System.getProperty("file.encoding")即使项目返回“Cp1252”而不是“UTF-8”,中文字符也会呈现: