1、乱码场景
新建 文件code.js,详情如下:
function fun() {
return "我是fun函数";
}
在Python中执行此JS代码:
import execjs
# 读取js
with open("code.js", encoding="utf8") as f:
jsCode = f.read()
print(jsCode)
# 编辑js
JS = execjs.compile(jsCode)
# 执行js代码
ret = JS.call("fun")
print(ret)
执行结果如下:
2、解决方案
在导入 execjs 模块前,让Popen的encoding参数锁定为utf-8。
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
完整代码如下:
# 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8
# 不要轻易改源码,可能会影响其他功能。
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
import execjs
# 读取js
with open("code.js", encoding="utf8") as f:
jsCode = f.read()
print(jsCode)
# 编辑js
JS = execjs.compile(jsCode)
# 执行js代码
ret = JS.call("fun")
print(ret)
执行结果如下: