python 使用execjs执行接js时报错UnicodeDecodeError:
Exception in thread Thread-5:
Traceback (most recent call last):
File "d:\python\python36\Lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "d:\python\python36\Lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "d:\python\python36\Lib\subprocess.py", line 1055, in _readerthread
buffer.append(fh.read())
UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 22: illegal multibyte sequence
错误出在python内部的subprocess.py文件
出现这个错误的原因最大的可能是你的环境里安装了nodejs,环境选择了nodejs去执行了js代码
>>> import execjs
>>> execjs.get().name
'Node.js (V8)'
在代码里加入下边一行,选择使用JScript执行JS,问题解决
os.environ["EXECJS_RUNTIME"] = "JScript"
打开subprocess.py文件,找到初始化函数__init__()(588行),修改参数的默认值为encoding=‘utf-8’,程序运行不再报错。
注意
这里改成’utf-8’之后,用pip install 安装包就会报错
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xbb in position 17: invalid start byte