【发布时间】:2019-02-26 20:29:14
【问题描述】:
我想打印一个包含西里尔字母的字符串(为了举例)。问题是在我的输出中,字符串会显示“?”而是字符。仅当我尝试在(无论是否为新的)Neatbeans Maven 项目中的标准输出上打印时,才会出现此问题。
下面你可以看到Maven把“-Dfile.encoding=UTF-8”参数放进去,所以我不明白为什么我的编码不是UTF-8。当我创建一个新的 Neatbeans 项目(没有 Maven)时,编码显示 UTF-8 并且输出很好。
package com.trashmaven;
import java.nio.charset.Charset;
public class TrashMaven {
public static void main(String[] args) {
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("defaultCharset: " + Charset.defaultCharset());
String myString = "мусор";
System.out.println("Russian letters: " + myString);
}
}
我的 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</groupId>
<artifactId>TrashMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>
</properties>
</project>
输出如下:
cd C:\Asztal\0Java Projekts\Testing stuff\TrashMaven; "JAVA_HOME=C:\\Program Files\\Java\\jdk-10.0.2" "M2_HOME=C:\\Program Files (x86)\\Maven\\apache-maven-3.6.0" cmd /c "\"\"C:\\Program Files (x86)\\Maven\\apache-maven-3.6.0\\bin\\mvn.cmd\" -Dexec.args=\"-classpath %classpath com.trashmaven.TrashMaven\" -Dexec.executable=\"C:\\Program Files\\Java\\jdk-10.0.2\\bin\\java.exe\" -Dmaven.ext.class.path=\"C:\\Asztal\\0Java Projekts\\00netbeans\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 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:TrashMaven >---------------------------
Building TrashMaven 1.0-SNAPSHOT
--------------------------------[ jar ]---------------------------------
--- exec-maven-plugin:1.5.0:exec (default-cli) @ TrashMaven ---
file.encoding=Cp1252
defaultCharset: windows-1252
Russian letters: ?????
------------------------------------------------------------------------
BUILD SUCCESS
【问题讨论】:
-
能否请您在 pom.xml 中显示 exec-maven-plugin 配置?
-
另外,问题似乎不在于 NetBeans,而在于 Windows 终端的默认编码。尝试从 cmd.exe 启动相同的内容。然后在cmd中执行“chcp 1251”再次启动。
-
我不确定如何显示“exec-maven-plugin”配置,我链接了整个 pom.xml。我无法从 cmd.exe 启动相同的命令,它给出“系统找不到指定的路径”错误。如果是windows终端的默认编码,我运行非maven的简单项目不应该得到同样的结果吗?
-
Maven 使用 OS 终端(在你的情况下是 cmd)来显示输出,它只是显示为另一个选项卡“终端”(它被称为“外部”或“集成”终端,可以通过手动打开工具 -> 在终端中打开),而 Netbeans 本身在其自己的“输出”选项卡(也称为“内部终端”)中运行应用程序。顺便说一句,IntelliJ IDEA 也是如此。对于“从 cmd 启动相同”,我的意思只是从 cmd 编译和运行您的应用程序,以检查潜在的编码问题(抱歉可能造成误解)。
-
我建议您设置环境变量 JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8,重新启动 Netbeans 并重试。检查您正在记录的值“defaultCharset”(那么它应该是 UTF-8)。
标签: java maven netbeans character-encoding