Netbeans 9 - печать символов Юникода - PullRequest
0 голосов
/ 12 ноября 2018

с 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 голосов
/ 13 декабря 2018

Для приложения Maven, созданного в NetBeans 9.0 с использованием Java 8, для правильной визуализации китайских символов в окне Вывод необходимо выполнить три действия, первые два из которых вы уже выполняли:

  1. Добавьте -J-Dfile.encoding=UTF-8 к свойству netbeans_default_options в файле etc / netbeans.conf , а затем перезапустите NetBeans.
  2. Из набора панелей Проекты {проект}> Свойства> Источник> Кодировка в UTF-8 .
  3. В приложении вызовите System.setOut(new PrintStream(System.out, true, "UTF8"));, чтобы поток печати, используемый при вызове System.out.println(), поддерживал кодировку UTF-8.

Стоит также отметить некоторые ненужные изменения:

  • Нет необходимости выбирать определенный шрифт в окне «Вывод» ( Сервис> Параметры> Разное> Вывод> Шрифт ), поскольку шрифт по умолчанию Monospaced работает нормально. Выбор другого шрифта может вызвать проблемы, если он не поддерживает китайские символы (например, Arial ).
  • Нет необходимости указывать file.encoding=UTF-8 в {project}> Properties> Run> VM Options .
  • Нет необходимости указывать что-либо о кодировке проекта в 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" :
...