Python调用外部脚本后的结果乱码问题解决方案
1. 问题
今天我在进行爬虫js逆向的时候,出现了这样一个问题:


2. 解决方案
在文件开头加上以下语句:
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="UTF-8")
这段代码的作用是使 subprocess.Popen 在每次被调用时,默认使用 UTF-8 编码。你可以依然调用 subprocess.Popen() 启动新进程,而不需要显式地每次都指定 encoding="UTF-8"。
subprocess.Popen:
- 这是 Python 标准库
subprocess模块中的一个类,用于启动新进程(执行系统命令)并与之通信。默认情况下,Popen可以通过设置encoding参数来指定进程的输入和输出使用的字符编码。
functools.partial:
partial是functools模块中的一个函数,它的作用是“部分”地应用函数,也就是为一个函数的某些参数设定默认值,返回一个新的函数。- 在这里,
partial(subprocess.Popen, encoding="UTF-8")意思是为subprocess.Popen设定了一个默认参数encoding="UTF-8",所以之后每次调用subprocess.Popen时,都会自动使用 UTF-8 编码。
subprocess.Popen = partial(...):
- 这行代码将
subprocess.Popen重新定义为一个新的函数。这个新函数相当于原来的Popen,但它已经自动包含了encoding="UTF-8"参数。因此,任何调用subprocess.Popen的地方,如果没有手动指定encoding,将默认使用 UTF-8 编码。
