You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
  • 配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:36:08