Python中execjs执行JS代码出现中文乱码
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)
执行结果如下:
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)
执行结果如下: