首页 > 编程语言 >Python中execjs执行JS代码出现中文乱码

Python中execjs执行JS代码出现中文乱码

时间:2023-12-04 21:35:49浏览次数:36  
标签:encoding Python subprocess JS 乱码 import js execjs

1、乱码场景

  新建 文件code.js,详情如下:

function fun() {
    return "我是fun函数";
}

  在Python中执行此JS代码:

 1 import execjs
 2 
 3 # 读取js
 4 with open("code.js", encoding="utf8") as f:
 5     jsCode = f.read()
 6 print(jsCode)
 7 
 8 # 编辑js
 9 JS = execjs.compile(jsCode)
10 
11 # 执行js代码
12 ret = JS.call("fun")
13 print(ret)

  执行结果如下:

0

2、解决方案

  在导入 execjs 模块前,让Popen的encoding参数锁定为utf-8。

1 import subprocess
2 from functools import partial
3 subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

  完整代码如下:

 1 # 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8
 2 # 不要轻易改源码,可能会影响其他功能。
 3 import subprocess
 4 from functools import partial
 5 subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")
 6 
 7 import execjs
 8 
 9 # 读取js
10 with open("code.js", encoding="utf8") as f:
11     jsCode = f.read()
12 print(jsCode)
13 
14 # 编辑js
15 JS = execjs.compile(jsCode)
16 
17 # 执行js代码
18 ret = JS.call("fun")
19 print(ret)

  执行结果如下:

0  

标签:encoding,Python,subprocess,JS,乱码,import,js,execjs
From: https://www.cnblogs.com/RunningSnails/p/17876034.html

相关文章

  • Python的with open
    1、文件的基本操作1.打开文件2.操作文件3.关闭文件关键字:open方式1f=open(r'a.txt','r',encoding='utf-8')#f=open(r'a.txt',mode='r',encoding='utf-8')res=f.read()print(res)##关闭文件:释放资源的#f.clo......
  • 填补表格文件日期列中缺少的天数并用0填充该行其他数据:Python
      本文介绍基于Python语言,读取一个不同的行表示不同的日期的.csv格式文件,将其中缺失的日期数值加以填补;并用0值对这些缺失日期对应的数据加以填充的方法。  首先,我们明确一下本文的需求。现在有一个.csv格式文件,其第一列表示日期,用2021001这样的格式记录每一天的日期;其后面几......
  • python中级之字符编码
    小引字符编码(CharacterEncoding)是计算机显示文本的基础,是每一位IT从业者必知的计算机基础知识点,如同数值在计算中如何存储表示,那么基础,那么重要。参考笔记字符编码笔记:ASCII,Unicode和UTF-8-阮一峰的网络日志(ruanyifeng.com)各种编码UNICODE、UTF-8、ANSI、ASCII、G......
  • Python 解析JSON实现主机管理
    JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它以易于阅读和编写的文本形式表示数据。JSON是一种独立于编程语言的数据格式,因此在不同的编程语言中都有对应的解析器和生成器。JSON格式的设计目标是易于理解、支持复杂数据结构和具有良好的可扩展性。JSON数据是......
  • 【python入门之文件操作】---文件操作
    【一】文本处理引入应用程序运行过程中产生的数据最先都是存放于内存中的若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统......
  • 【python入门之文字符编码】---字符编码
    简介计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如’a’用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过......
  • 【python基础之可变和不可变数据类型】---python之栈的介绍
    【二】栈【0】引入https://www.hello-algo.com/chapter_stack_and_queue/栈如同叠猫猫,而队列就像猫猫排队。两者分别代表着先入后出和先入先出的逻辑关系。【1】栈的介绍「栈stack」是一种遵循先入后出的逻辑的线性数据结构。我们可以将栈类比为桌面上的一摞盘......
  • 【python基础之可变和不可变数据类型】--- python之堆的介绍
    【一】堆堆--简介:一种基于树的数据结构堆是满足堆特性的完全二叉树,即树中每个节点的值大于或等于其子节点的值。有两种类型的堆:1.最大堆:在最大堆中,每个节点的值都大于或等于其子节点的值,并且根节点在树中具有最大值。2.最小堆:在最小堆中,每个节点的值都小于或等于其子......
  • 【python基础之可变和不可变数据类型】--- python堆栈的相关应用
    【一】用代码实现堆和栈【1】堆#堆的操作是先进先出(FIFO)list_queue=[]foriinrange(0,5):print(f'{i}已入堆(队列)')list_queue.append(i)print('------入堆完毕--------')whilelist_queue:print(f'{list_queue.pop(0)}已出堆(队列)')print('-......
  • 04-python代码审计
    eg1:@app.route('/getUrl',methods=['GET','POST'])defgetUrl():url=request.args.get("url")host=parse.urlparse(url).hostname#解析主机名ifhost=='suctf.cc':return"我扌y......