Gradle构建Java项目遇Cp1252编码无法映射字符问题求解决方案
解决Gradle构建时的Cp1252编码乱码问题
这个问题我之前帮不少开发者处理过,本质就是编码不匹配搞出来的锅:你的Java文件用的是UTF-8编码(里面的弯引号是UTF-8支持的特殊字符),但Gradle默认用了Windows系统的Cp1252编码读取文件,Cp1252不认识这些特殊字符,就抛出了“unmappable character”错误。
下面给你几个靠谱的解决办法,按优先级排序:
方法1:在Gradle构建脚本中强制指定UTF-8编码(推荐)
这是最直接且持久的方案,修改项目的build.gradle(多模块项目可以改根目录的build.gradle,或者对应模块下的配置文件),添加编译时的编码配置:
tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }
如果是Gradle 7.x及以上版本,也可以用更简洁的写法:
java { compileOptions.encoding = 'UTF-8' // 可选:指定你的Java版本,比如Java 17 toolchain.languageVersion = JavaLanguageVersion.of(17) }
添加完之后重新执行gradle build,Gradle就会用UTF-8编码读取和编译Java文件,乱码问题直接解决。
方法2:设置系统环境变量全局生效
如果不想每个项目都改Gradle脚本,可以给Java工具设置全局编码规则:
- Windows系统:按Win+R输入
sysdm.cpl,切换到「高级」标签页点击「环境变量」 - 新建系统变量:
- 变量名:
JAVA_TOOL_OPTIONS - 变量值:
-Dfile.encoding=UTF-8
- 变量名:
- 保存后重启命令行或IDE,再执行
gradle build
这个方法会让所有Java相关工具(包括Gradle、javac、java命令)默认使用UTF-8编码,属于一劳永逸的方案。
方法3:临时修复注释内容(治标不治本)
如果只是想快速过构建流程,也可以直接修改报错的注释行:把里面的弯引号「“”」换成普通的直引号「""」,比如把原注释改成:
for example, a network code of "NH" may appear on a "National Highway" or "New Hampshire"
不过这个方法只能解决当前文件的问题,后续如果还有其他带特殊字符的注释,还是会触发报错,只推荐临时应急使用。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

