Maven Tips

解决mvn编译输出乱码的问题

乱码及分析

最近的某个项目从jdk17升级到jdk21,mvn clean install的时候,某些输出为中文的地方变成了乱码。搜索出的资料大多数都是IDEA相关,解决办法要么是设置IDEA的File encoding,要么是在pom.xml里设置编码,都与我的这个问题不符。

从现象来看应该是jdk版本导致的,因为我运行mvn命令是在PowerShell下,不是IDEA。最先怀疑是不是jdk厂商的问题,不同厂商的实现有差异。后来都用Oracle提供的JDK进行测试,还是问题依旧,17中文不乱码,切换到21就乱码了。所以推测是JDK 21检测系统的local编码跟17不一样,尝试找了一下有没有设置JDK日志输出编码的参数,未果。

后来在这篇博文里找到了解决方案:关于使用gradle编译java导致中文乱码的分析以及解决(完美且分析了所有情况)

虽然该文是讲Gradle,但是这个问题的根本原因是在JDK上,仍然适合解决我遇到的问题。

解决方法

设置“使用Unicode UTF-8 提供全球语言支持”,操作路径为:控制面板-时钟和区域-区域(更改日期、时间或数字格式)-管理(更改系统区域设置)-勾选“Beta版:使用Unicode UTF-8 提供全球语言支持”,设置之后重启生效。