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 编码。