如何在PowerShell中正确以UTF-8显示Git Hook调用的Gradle构建信息
问题根因
Git Hook 是 Git 进程拉起的独立子进程,不会继承你当前 PowerShell 会话手动设置的65001(UTF-8)代码页配置,运行时默认使用系统原生ANSI代码页(简体中文系统为936/GBK);此时即使你在gradle.properties中配置了JVM的UTF-8编码参数,进程输出编码和控制台解码编码不匹配,就会出现乱码。手动执行Gradle任务时,你当前打开的PowerShell会话已经切到UTF-8编码,因此输出正常。
另外你当前配置的org.gradle.jvmargs参数存在多余的单引号,且未指定标准输出、标准错误流的编码,在非交互子进程场景下JVM不会自动跟随file.encoding配置控制台流编码,也会加剧乱码问题。
修复步骤
按优先级依次操作即可:
- 修正
gradle.properties中的JVM参数配置,去掉多余单引号,补充控制台流编码配置:
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
- 给Git Hook脚本增加强制UTF-8代码页逻辑:打开项目
.git/hooks目录下触发Gradle任务的对应脚本(一般为pre-commit或pre-push),在执行Gradle命令的代码前,增加代码页切换命令:- 如果Hook是PowerShell脚本,添加:
chcp 65001 > $null - 如果Hook是Shell脚本(Git for Windows默认带的sh环境),添加:
chcp.com 65001 > /dev/null
- 如果Hook是PowerShell脚本,添加:
- 配置Git全局编码参数,在PowerShell中依次执行以下命令:
git config --global core.quotepath false git config --global i18n.commitEncoding utf-8 git config --global i18n.logOutputEncoding utf-8
- (可选)如果你还在使用Windows旧版控制台主机(conhost.exe),建议替换为Windows Terminal,默认对UTF-8的兼容性更好,可规避大部分老旧控制台的编码适配问题。
验证
修改完成后直接执行Git commit/push操作触发Hook,不需要手动提前切换PowerShell代码页,此时Kotlinter的Gradle任务输出即可正常显示。
内容的提问来源于stack exchange,提问作者Hantsy
相关产品推荐
相关产品推荐

