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