开发的软件遇到个问题,请教一下如何解决?
通过 nodejs 执行命令,需要执行的程序 compress.exe 是在用户文件夹下,而用户名是中文,这时候会报错,说 the system cannot find the path specified
请问有何办法绕过这个中文用户吗?
实验过,只有系统用户名是中文会报错,如果是文件名中文并不会报错。
C:\Users\虎鲸>node test.js
Error: Command failed: C:\Users\虎鲸\AppData\Local\Studio\app-1.0.3\resources\app\ext\fbximporter\fbx2cal3d.exe --log C:\Users\虎鲸\Documents\IMVU Studio Projects\_fbx\_logs\THE_tshirt_Square.fbx.data.txt -f C:\Users\虎鲸\Documents\Studio Projects/_fbx/current.fbx --list-all
The system cannot find the path specified.
at ChildProcess.exithandler (child_process.js:383:12)
at ChildProcess.emit (events.js:400:28)
at maybeClose (internal/child_process.js:1058:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5) {
killed: false,
code: 1,
signal: null,
cmd: 'C:\\Users\\虎鲸\\AppData\\Local\\Studio\\app-1.0.3\\resources\\app\\ext\\fbximporter\\fbx2cal3d.exe --log C:\\Users\\虎鲸\\Documents\\Studio Projects\\_fbx\\_logs\\THE_tshirt_Square.fbx.data.txt -f C:\\Users\\虎鲸\\Documents\\Studio Projects/_fbx/current.fbx --list-all'
}
1
pansongya 2021-10-23 07:14:47 +08:00 via Android
路径加双引号试试
|
2
l4ever 2021-10-23 08:42:49 +08:00 1
既然知道问题, 就把用户名改回英文
|
3
kokutou 2021-10-23 09:06:05 +08:00
|
7
momocraft 2021-10-23 10:39:00 +08:00
怎么执行的 有正确传递参数 **列表** 吗?
|
8
yocoso OP @kokutou 谢谢,尝试用 iconv 将 cmd 从 cp936 转换成 utf-8, 结果变成 C:\Users\铏庨哺\ 了,是不是编码弄错了
|
10
yocoso OP @momocraft 写了一个很简单的 script 来测试,参数没问题,试过其他非中文用户路径,没有问题。
const { exec } = require('child_process'); const cmd = 'C:\\Users\\虎鲸\\AppData\\Local\\IStudio\\app-1.0.3\\resources\\app\\ext\\fbximporter\\fbx2cal3d.exe --log C:\\Users\\虎鲸\\Documents\\Studio Projects\\_fbx\\_logs\\THE_tshirt_Square.fbx.data.txt -f C:\\Users\\虎鲸\\Documents\\Studio Projects/_fbx/current.fbx --list-all'; exec(cmd, (err, stdout, stderr)=>{ if (err) { console.log(err); return; } console.log(stdout); }); |
11
momocraft 2021-10-23 11:34:35 +08:00
@yocoso 可以试试 child_process.execFile , 这个是程序文件和参数分开传的 也许能避免 exec 命令解析中可能产生的问题
|
12
DiamondYuan 2021-10-23 13:02:16 +08:00 via iPhone
options 设置 shell:true 试试看?
|
13
kokutou 2021-10-23 16:29:35 +08:00
@yocoso #8
https://stackoverflow.com/questions/20731785/wrong-encoding-when-using-child-process-spawn-or-exec-under-windows 直接切换 cmd 到 65001 再运行。 Google 搜索 child_process cp936 第一个就是答案。 |
14
g00001 2021-10-23 16:39:53 +08:00
Node.js 虽然强大,毕竟不是专为 Windows 设计,有时候这种坑是真不少,
用一段 aardio 代码解释一下 Node.js 为什么会有乱码: import win.ui; /*DSG{{*/ var winform = win.form(text="Node.js";right=754;bottom=457) winform.add( edit={cls="edit";left=21;top=19;right=727;bottom=426;edge=1;multiline=1;z=1} ) /*}}*/ import nodeJs; nodeJs.require("iconv-lite"); var testjs = /*** console.log("双方编码一致没乱码:") console.log(process.argv); const iconv = require('iconv-lite'); const { exec } = require('child_process'); exec('echo 中文', { encoding: 'binary' }, (err, stdout, stderr) => { console.log("乱码了:",stdout); stdout = iconv.decode(Buffer.from(stdout, 'binary'), 'cp936'); console.log("不乱码了:",stdout); }); ***/ var node = nodeJs.exec(testjs,"--log","测试 UTF-8 不会乱码 😀"); for( all,out,err in node.each() ){ winform.edit.print(all); } winform.show(); win.loopMessage(); |
15
uvwlab 2021-10-23 23:15:39 +08:00
试下 Powershell
|