Python中execjs执行JS代码出现中文乱码

发布时间 2023-12-04 21:27:47作者: 无虑的小猪

1、乱码场景

  新建 文件code.js,详情如下:

function fun() {
    return "我是fun函数";
}

  在Python中执行此JS代码:

 1 import execjs
 2 
 3 # 读取js
 4 with open("code.js", encoding="utf8") as f:
 5     jsCode = f.read()
 6 print(jsCode)
 7 
 8 # 编辑js
 9 JS = execjs.compile(jsCode)
10 
11 # 执行js代码
12 ret = JS.call("fun")
13 print(ret)

  执行结果如下:

0

2、解决方案

  在导入 execjs 模块前,让Popen的encoding参数锁定为utf-8。

1 import subprocess
2 from functools import partial
3 subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

  完整代码如下:

 1 # 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8
 2 # 不要轻易改源码,可能会影响其他功能。
 3 import subprocess
 4 from functools import partial
 5 subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
 6 
 7 import execjs
 8 
 9 # 读取js
10 with open("code.js", encoding="utf8") as f:
11     jsCode = f.read()
12 print(jsCode)
13 
14 # 编辑js
15 JS = execjs.compile(jsCode)
16 
17 # 执行js代码
18 ret = JS.call("fun")
19 print(ret)

  执行结果如下:

0