2401Idea用GradleKotlin编译Java控制台中文出乱码解决

解决方法

解决方法1

在项目 build.gradle.kts 文件中加入

kotlin 复制代码
tasks.withType<JavaCompile> {
	options.encoding = "UTF-8"
}
tasks.withType<JavaExec> {
	systemProperty("file.encoding", "utf-8")
}

经测试, 只加

kotlin 复制代码
tasks.withType<JavaExec> {
	systemProperty("file.encoding", "utf-8")
}

就解决了

解决方法2

构建工具选"IntelliJ IDEA"后解决

解决方法3

在启动JavaJvm的参数选项中加入 Dfile.encoding=UTF-8 选项 :

比如修改gradle安装目录下的bin目录下的gradle.bat文件 .
GRADLE_HOME/bin/gradle.batDEFAULT_JVM_OPTS 选项

比如修改之前为:

sh 复制代码
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar"

修改后为:

sh 复制代码
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar" "Dfile.encoding=UTF-8"

实例截取

sh 复制代码
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
::原先的 set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar"
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar" "Dfile.encoding=UTF-8"

过程

控制台中文出现乱码

复制代码
��ѹVoltage=229.5
����Current=358
����Power=48.8
��������PowerFactor=0.59
Ƶ��Frequency=50
�¶�Temperature=20

此时的状态, java文件本身时UTF-8的,

这三处的文件编码都选了UTF8,但还是乱码

在项目 build.gradle.kts 文件中加入

kotlin 复制代码
tasks.withType<JavaCompile> {
	options.encoding = "UTF-8"
}

未能解决

在idea安装目录 idea64.exe.vmoptions文件中加入-Dfile.encoding=UTF-8 依旧无效 , 因为此时是用本地的gradle来编译,不是idea自身来编译

txt 复制代码
-Dkotlinx.coroutines.debug=off

添加后的的 idea64.exe.vmoptions

txt 复制代码
-Xms128m
-Xmx2048m
-XX:ReservedCodeCacheSize=512m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:+IgnoreUnrecognizedVMOptions
-XX:CompileCommand=exclude,com/intellij/openapi/vfs/impl/FilePartNodeRoot,trieDescend
-ea
-Dsun.io.useCanonCaches=false
-Dsun.java2d.metal=true
-Djbr.catch.SIGABRT=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off

仍然未解决 , 因为此时是用本地的gradle来编译,不是idea自身来编译

将构建工具选"IntelliJ IDEA"后解决

选择用idea编译后,解决了.但不甘心,为什么用gradle构建不行呢?

其实,此时无论idea和gradle编译出的class都是UTF-8的了, 那么问题在哪呢?

查看javaSystem的file.encoding属性

在程序中加入一句 System.out.println(System.getProperty("file.encoding"));

java 复制代码
System.out.println(System.getProperty("file.encoding"));

发现结果时GBK!!! (构建工具选"IntelliJ IDEA"时是"UTF-8" , 选"Gradle时是"GBK" )

于是在项目 build.gradle.kts 文件中加入

kotlin 复制代码
tasks.withType<JavaExec> {
	systemProperty("file.encoding", "utf-8")
}

解决了

原因

由Gradle8.5启动的jvm环境会使用操作系统的字符集GBK,引起了乱码

相关推荐
艾伦~耶格尔10 分钟前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
yujkss25 分钟前
Python脚本每天爬取微博热搜-终版
开发语言·python
yzx99101328 分钟前
小程序开发APP
开发语言·人工智能·python·yolo
一只叫煤球的猫33 分钟前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
最初的↘那颗心34 分钟前
Flink Stream API 源码走读 - print()
java·大数据·hadoop·flink·实时计算
啊阿狸不会拉杆1 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
JH30731 小时前
Maven的三种项目打包方式——pom,jar,war的区别
java·maven·jar
带刺的坐椅2 小时前
轻量级流程编排框架,Solon Flow v3.5.0 发布
java·solon·workflow·flow·solon-flow
David爱编程3 小时前
线程调度策略详解:时间片轮转 vs 优先级机制,面试常考!
java·后端
武当豆豆3 小时前
C++编程学习(第25天)
开发语言·c++·学习