NetBeans 12中Maven项目输出控制台UTF-8编码设置问题
该问题源于NetBeans无法正确解码UTF-8文档中的áðíøåú等北欧字符。检索得到的初步方案是设置-J-Dfile.encoding=UTF-8,配置后即可正常查看、编辑UTF-8编码的文件。
此时查看「帮助->关于」页面显示:
Product Version: Apache NetBeans IDE 12.4 Java: 16.0.1; OpenJDK 64-Bit Server VM 16.0.1+9-24 Runtime: OpenJDK Runtime Environment 16.0.1+9-24 System: Windows 10 version 10.0 running on amd64; UTF-8; en_US (nb)
-J-Dfile.encoding=UTF-8需添加到netbeans.conf文件中netbeans_default_options配置项的末尾,该配置会将原本的系统编码从:
System: Windows 10 version 10.0 running on amd64; Cp1252; en_US (nb)
修改为:
System: Windows 10 version 10.0 running on amd64; UTF-8; en_US (nb)
完成上述配置后,输出控制台仍无法正常显示北欧字符。点击输出窗口左侧的设置按钮打开Maven选项对话框,未找到输出编码设置入口,当前Maven Home设置为Bundled。相同配置在Linux(Debian 10)系统中无需额外调整即可正常输出。
根据建议先执行第一次测试代码:
System.out.println(System.getProperty("file.encoding"));
输出结果为Cp1252。
第二次测试代码如下:
import java.io.PrintStream; import java.nio.charset.StandardCharsets; ... PrintStream out = new PrintStream(System.out, true, StandardCharsets.UTF_8); System.out.println("读写汉字");
输出结果为????,即便明确指定了StandardCharsets.UTF_8仍存在乱码问题。
尝试在「项目属性->运行->VM选项」中添加-Dfile.encoding=UTF-8,输出无变化。之后从netbeans.conf中移除-J-Dfile.encoding=UTF-8,查看「帮助->关于」显示系统编码恢复为Cp1252,此时在Notepad++中创建UTF-8编码文件放入项目src目录,NetBeans可正常显示字符,但打开项目外的UTF-8文件时北欧字符显示异常,重新添加配置后字符显示恢复正常,中文字符也可正常显示。
再次运行测试代码,file.encoding属性输出为UTF-8,但第二次测试仍输出????。同时发现输出窗口首行命令存在变化:未在netbeans.conf添加配置时,命令末尾带有-Dfile.encoding=UTF-8,添加配置后该参数消失。
经排查发现问题源于NetBeans与Maven的配置存在冲突:
- 要让NetBeans正确显示UTF-8编码文件的字符,需在
netbeans.conf的netbeans_default_options末尾添加-J-Dfile.encoding=UTF-8 - 要让输出控制台正常显示北欧字符,需将Maven项目的项目设置编码改为UTF-8,且需移除
netbeans.conf中的-J-Dfile.encoding=UTF-8配置
目前中文字符显示问题仍未解决,尝试将Maven项目编码设置为UTF-16、UTF-32、Big5,更换Monospaced、NSimSun、SimSun等字体均无效,寻求解决方案。
感谢andrewjames和skomisa的帮助。
内容的提问来源于stack exchange,提问作者jacobm

