node os.hostname() 获取中文主机名乱码
如果电脑主机名含有中文,在使用node
的os
模块的hostname()
方法获取到的主机名有可能会乱码,无论怎么转码都不对。于是本文不采用node
提供的hostname()
方法来获取主机名。取而代之的是采用cmd
的hostname
命令来获取主机名。
相关依赖
方法封装
exports.getHostname = (cb) => {
cb = cb || function () {} // 赋默认值,以防调用getHostname方法时没传回调函数而报错
const iconv = require('iconv-lite') // 用于把获取到的中文从GB18030编码转为UTF-8编码
const { spawn } = require('child_process') // 用于执行CMD命令
const hostnameProcess = spawn('cmd', ['/c', 'hostname']) // 执行CMD命令,并且传入参数'hostname'
// 子进程标准输出,由于该输出是异步,所以需要回调函数cb
hostnameProcess.stdout.on('data', function (data) {
const buf = iconv.decode(data, 'GB18030')
const hostname = iconv.encode(buf, 'UTF-8').toString().trim()
cb(hostname) // 回调函数中传出hostname
})
}
方法使用
const { getHostname } = require('./getHostname.js')
getHostname((hostname) => {
console.log(hostname)
})