博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于python调用js返回中文的乱码

Posted on 2025-02-08 20:54  土豆茶子  阅读(54)  评论(0)    收藏  举报

JS 测试代码

function test(){
    return "你好,世界!";
}

python 代码

import execjs
def func1():
    # 默认subprocess.Popen的编码与open保持一致,都为 cp936
    with open('./test.js', 'r') as f:
        js_code = f.read()
    js_compiled = execjs.compile(js_code)
    result = js_compiled.call('test')
    print(result.encode('cp936').decode('utf-8'))

方式二 使用functools.partial来修改Popen默认创建文件流的编码格式

import subprocess
from functools import partial

subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
import execjs

def func2():
    with open('./test.js', 'r',encoding="utf-8") as f:
        js_code = f.read()

    js_compiled = execjs.compile(js_code)
    result = js_compiled.call('test')
    print(result)

这两种方式都可以,方式一不通用,碰到那种解密返回的中文就不行,得用方式二