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

Node.js child_process exec执行杀毒命令时德语变音字符编码异常

解决Node.js exec调用杀毒软件时德语变音字符乱码问题

问题根源

  1. 带空格的路径在cmd嵌套调用时,引号解析错误导致命令执行失败
  2. Node.js与cmd的编码不匹配,导致变音字符(ö, ä, ü)显示为�

方案一:修复命令引号嵌套,强制使用UTF-8编码

针对命令报错问题,需将cmd /d/s/c后的完整命令用双引号包裹,同时正确转义路径中的引号,确保空格路径被正确识别。结合强制设置UTF-8代码页,调整代码如下:

const { exec } = require('child_process');

// 正确转义嵌套引号,确保带空格的路径被cmd正确解析
const command = 'cmd /c "chcp 65001 >nul && \"C:\\Program Files\\Antivirus\\antivirus.exe\" --console --scan C:\\path\\to\\file"';

exec(command, { encoding: 'utf-8' }, (err, stdout, stderr) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(stdout);
    // 后续写入文件等操作
});

说明:

  • chcp 65001 >nul 强制将当前cmd实例的代码页设为UTF-8,同时抑制输出
  • 用外层双引号包裹chcp和杀毒软件命令的组合,避免cmd将空格路径拆分为多个参数

方案二:基于系统默认代码页解码输出(更可靠)

若强制UTF-8无效,说明杀毒软件输出编码依赖系统默认代码页(通常为CP1252,西欧语言常用)。此时可直接以二进制buffer接收输出,再用对应编码解码:

  1. 先安装iconv-lite:
npm install iconv-lite
  1. 调整代码:
const { exec } = require('child_process');
const iconv = require('iconv-lite');

// 获取当前cmd默认代码页
const getCodePage = () => {
    const { execSync } = require('child_process');
    const output = execSync('chcp').toString();
    return output.match(/\d+/)[0];
};

const codePage = getCodePage();
const antivirusCmd = '"C:\\Program Files\\Antivirus\\antivirus.exe" --console --scan C:\\path\\to\\file';

// 以buffer形式接收输出,避免编码自动转换导致乱码
exec(antivirusCmd, { encoding: 'buffer' }, (err, stdoutBuffer, stderrBuffer) => {
    if (err) {
        console.error(err);
        return;
    }
    // 用系统默认代码页解码为UTF-8字符串
    const stdout = iconv.decode(stdoutBuffer, `cp${codePage}`);
    const stderr = iconv.decode(stderrBuffer, `cp${codePage}`);
    
    console.log(stdout);
    // 写入文件等操作
});

说明:

  • 直接调用杀毒软件命令,无需额外设置代码页,避免编码冲突
  • 以buffer接收输出后,用系统默认代码页解码,确保与直接在cmd运行时的编码一致

内容的提问来源于stack exchange,提问作者sirzento

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:16:17