解决 Python 调用 execjs
时的编码问题:Subprocess 的正确打开方式
前言
在使用 Python 开发中,有时候我们需要调用 JavaScript 代码。为此,很多人会选择 execjs
库,它能够通过多种 JavaScript 运行时(如 Node.js)来执行 JS 脚本。然而,在 Windows 环境下,部分开发者可能会遇到莫名的错误,特别是当 Python 的 subprocess
模块涉及编码问题时。本文将详细解析问题根源,并提供简单高效的解决方案。
问题现象
当我们在 Windows 环境中使用 execjs
并选择 Node.js 作为运行时时,可能会报出以下类似错误:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence
错误源头可能指向 Python 的 subprocess.py
文件。这个问题常发生在 Python 调用 Node.js 子进程时,Python 默认使用系统编码(如 GBK),而 Node.js 返回的数据可能是 UTF-8,导致编码解析失败。
问题分析
1. Python 的 subprocess
模块
subprocess
是 Python 中用于调