nodejs 使用child_process的execSync方法执行es.exe时设置了encoding: 'utf8'还是返回出现中文乱码
时间: 2023-12-31 18:03:52 浏览: 151
如果在使用encoding: 'utf8'后仍然出现中文乱码,可能是因为execSync方法的输出数据流并不是一个纯文本流,而是包含了二进制数据或其他不可见的字符。此时,可以尝试使用iconv-lite等库进行编码转换或者使用正则表达式等方式过滤掉特殊字符。
例如,使用iconv-lite库进行编码转换:
```
const { execSync } = require('child_process');
const iconv = require('iconv-lite');
const result = execSync('command', { encoding: 'buffer' });
const decodedResult = iconv.decode(result, 'gbk');
```
其中,'gbk'是指数据流的实际编码,需要根据实际情况来设置。如果不清楚数据流的编码,可以尝试使用iconv-lite库自动检测编码:
```
const { execSync } = require('child_process');
const iconv = require('iconv-lite');
const result = execSync('command', { encoding: 'buffer' });
const detectedEncoding = iconv.encodingExists(result) || 'utf8';
const decodedResult = iconv.decode(result, detectedEncoding);
```
另外,如果输出包含了特殊字符,可以使用正则表达式来过滤掉这些字符:
```
const { execSync } = require('child_process');
const result = execSync('command', { encoding: 'utf8' });
const filteredResult = result.replace(/[^\x00-\xff]/g, '');
```
其中,/[^\x00-\xff]/g是一个正则表达式,用于匹配所有不可见字符,并将其替换为空字符串。
阅读全文