我正在 Windows 系统上使用 Gradle 通过 Gradle Node 插件执行
lint-staged
和 npm-groovy-lint
。运行这些命令的输出与直接在 Node 中运行工具时生成的输出不同。
节点输出
npm-groovy-lint results in linted files:
┌─────────┬───────────┬─────────────┬─────────────┬─────────────────┐
│ (index) │ Severity │ Total found │ Total fixed │ Total remaining │
├─────────┼───────────┼─────────────┼─────────────┼─────────────────┤
│ 0 │ 'Error' │ 0 │ 0 │ 0 │
│ 1 │ 'Warning' │ 1 │ 0 │ 1 │
│ 2 │ 'Info' │ 46 │ 11 │ 35 │
└─────────┴───────────┴─────────────┴─────────────┴─────────────────┘
渐变输出
npm-groovy-lint results in linted files:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö?
Γöé (index) Γöé Severity Γöé Total found Γöé Total fixed Γöé Total remaining Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöé 0 Γöé 'Error' Γöé 0 Γöé 0 Γöé 0 Γöé
Γöé 1 Γöé 'Warning' Γöé 1 Γöé 0 Γöé 1 Γöé
Γöé 2 Γöé 'Info' Γöé 46 Γöé 11 Γöé 35 Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
显式设置 Gradle 编码 (
org.gradle.jvmargs=-Dfile.encoding=UTF-8
) 会稍微修改输出,但仍然与 Node 输出不匹配。
我更愿意使用 Gradle 来实现此目的,但如果有必要,我可以使用 Node 脚本来代替。
更新
这可以通过一个简单的 Gradle 任务来重现,以使用 Node 打印表字符之一:
task nodeLog {
exec {
commandLine 'node', '-e', "console.log('┌')"
}
}
Output: Γöî
版本
Gradle 包装器:7.2
Java:11.0.12_7
Gradle 节点插件:5.0.0
节点:16.20.1
lint-staged:13.2.3
npm-groovy-lint:11.1.1
该问题是由 Windows 控制台的默认编码引起的,即 DOS Latin US(代码页 437)。将代码页切换为 UTF-8 (
chcp 65001
) 可以让控制台正确显示 Node 生成的 UTF-8 字符。
有关此问题以及如何解决该问题的信息可在此处找到:http://illegalargumentexception.blogspot.com/2009/04/i18n-unicode-at-windows-command-prompt.html#charsets_1252
在寻找永久设置 Windows 默认代码页的方法时,我发现了许多警告不要这样做,因为它可能会破坏多个 Windows 功能。