Gradle Node 任务的输出与在 Node 中运行相同命令的编码不同

问题描述 投票:0回答:1

我正在 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

node.js gradle-plugin
1个回答
0
投票

该问题是由 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 功能。

© www.soinside.com 2019 - 2024. All rights reserved.