PHP使用exec执行nodejs时,传入JS的中文字符是乱码

发布于 2022-09-05 03:16:19 字数 2134 浏览 39 评论 0

现有问题

  1. PHP代码中,用exec执行nodejs命令

  2. nodejs接受到的中文是乱码

  3. 所有操作,都是用CLI模式运行的(即命令行下运行)

  4. 已执行chcp 65001切换代码页,且PHP和NodeJS文件都是UTF8编码(无BOM头)

  5. 命令行直接运行NodeJS命令,接受到的值是正常的

  6. 命令行运行PHP,NodeJS接收到的中文字符为乱码

开发环境

  1. Windows 10 (1703 OS内部版本15063.296)

  2. PHP 5.5.7 (cli)

  3. Zend Engine v2.5.0

  4. node v6.9.2

  5. 命令行:cmd V10.0.15063

  6. 测试脚本1:test.php (php脚本)

  7. 测试脚本2:test.js (nodejs脚本)

  8. 其他可能影响的因素:

    • test.js使用了yargs包,用于接收命令行传参

    • 由于npm长期连不上,使用了淘宝源cnpm命令替换了npm命令

错误复现

test.php

<?php
print(exec('node test.js -t "红掌拨清波"'));
?>

test.js

'use strict';
const yargs = require('yargs');

var argv = yargs
    .options({
        't': {
            alias: 'text',
            demandOption: true,
            default: '',
            describe: 'Source text.',
            type: 'string'
        }
    })
    .argv;

console.log(argv.t);

复现流程

  • 打开cmd.exe,输入chcp 65001,切换编码到UTF-8

clipboard.png
clipboard.png

  • 先运行test.js,传入参数-t "白毛浮绿水",正常

clipboard.png

  • 在运行test.php,输出乱码

clipboard.png

  • 请问这个情况是什么原因导致的,应该如何处理,谢谢了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彼岸花ソ最美的依靠 2022-09-12 03:16:19

windows cmd默认是gbk编码吧,所以传utf8会乱码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文