A-A+

execjs执行报错 UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 224: illegal multibyte sequence

2023年07月24日 14:48 学习笔记 暂无评论 共937字 (阅读553 views次)

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

最近执行execjs 程序报错,追查了很多原因最终发现是subprocess.py这个文件导致的,这个文件是execjs这个库里的一个文件,打开方式如果是windows 10 系统中文语言的话,默认使用了gbk方式打开,结果报错。

images

报错提示如下:

Exception in thread Thread-41:
Traceback (most recent call last):
  File "C:\Python\Python39\lib\threading.py", line 954, in _bootstrap_inner
    self.run()
  File "C:\Python\Python39\lib\threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Python\Python39\lib\subprocess.py", line 1479, in _readerthread
    buffer.append(fh.read())
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 224: illegal multibyte sequence

 

解决方案其实很简单,换成ExecJs2 这个库就可以了。或者通过下面两个方法也可以。

 

第一种解决办法(需要修改execjs源码):

根据报错提示,可以知道subprocess.py在1367行报错,进入到subprocess.py中。在文件中搜索: encoding=None,

images

将 encoding=None修改为encoding="utf-8"

images

然后再执行程序,可以解决以上问题。

第二种解决办法(不需要修改源码):

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

在导入 execjs之前写入以上3行代码,也可以解决此问题。

 

以上参考:https://blog.csdn.net/qq_19309473/article/details/124152048

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言