You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7遍历含非ASCII字符词表时ASCII编解码器错误求助

问题分析与解决方法

为什么Python 2.7默认用ASCII编码?

Python 2.7的字符串体系区分str(字节串)和unicode(文本串)。即便系统环境变量LANG是UTF-8,Python 2.7在隐式进行字节串与文本串转换时,默认编码仍为ASCII。比如将unicode对象和str对象拼接、或对str调用decode()却不指定编码时,都会默认用ASCII解码,遇到非ASCII字节就会触发UnicodeDecodeError。你的报错正是因为代码中存在这种隐式转换——比如secret(可能是unicode类型)和后续padding字节串拼接时,Python尝试用ASCII解码字节串,最终失败。

Python 2.7下的解决办法

  • 统一字符串类型:加密操作需确保所有输入都是字节串(str类型),避免混合unicode和str:
    1. 读取词表时,直接解码为unicode再转成字节串:
      import codecs
      with codecs.open('wordlist.txt', 'r', 'utf-8') as f:
          words = [word.strip().encode('utf-8') for word in f]
      
    2. 修改加密初始化代码,先把secret转成字节串再处理padding:
      secret_bytes = secret.encode('utf-8')  # 若secret是unicode类型
      padding_length = (BLOCK_SIZE - len(secret_bytes) % BLOCK_SIZE)
      cipher = AES.new(secret_bytes + padding_length * PADDING, AES.MODE_ECB)
      
  • 显式指定编码:所有编码/解码操作都明确写utf-8,绝不依赖默认行为。

Python 3下的Crypto模块问题解决

Python 3原生没有Crypto模块,需安装替代库pycryptodome:

pip install pycryptodome

安装后正常导入即可:

from Crypto.Cipher import AES

内容的提问来源于stack exchange,提问作者nalthea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:32:47