使用pgpy加密解密CSV后头部出现Unicode字符问题求助
问题分析与解决:PGPY加密解密CSV后头部出现字符
问题原因
 是UTF-8编码的**字节顺序标记(BOM)**被错误解码后的显示结果,对应原始字节为EF BB BF。问题根源:
- 原始CSV文件以带UTF-8 BOM的格式保存
- 读取文件时未指定正确编码,Python默认编码(取决于系统环境)将BOM字节当作普通文本字符读取,随后被纳入PGP加密内容
- 解密后这部分字符被保留,导致表头前出现

解决方法
方法1:读取时自动去除BOM
修改文件读取逻辑,指定encoding='utf-8-sig'编码,该编码会自动识别并移除UTF-8 BOM:
import os import pgpy # 加密文件 key, _ = pgpy.PGPKey.from_file('C:\\Users\\Administrator\\Sellerbox\\testkey.pub') # 指定utf-8-sig编码读取,自动处理BOM with open(os.path.join(os.getcwd(), 'Orders.csv'), encoding='utf-8-sig') as csv: file_content = csv.read() file_message = pgpy.PGPMessage.new(file_content) encrypted_file_message = key.encrypt(file_message) # 用二进制模式写入加密文件,避免编码转换风险 with open(os.path.join(os.getcwd(), 'Orders.csv.pgp'), 'wb') as encrypted_file: encrypted_file.write(bytes(encrypted_file_message))
方法2:手动去除内容中的BOM标记
若无法确定文件编码,可读取后手动检查并移除BOM:
import os import pgpy # 加密文件 key, _ = pgpy.PGPKey.from_file('C:\\Users\\Administrator\\Sellerbox\\testkey.pub') with open(os.path.join(os.getcwd(), 'Orders.csv'), encoding='utf-8') as csv: file_content = csv.read() # 手动检测并移除UTF-8 BOM if file_content.startswith('\ufeff'): file_content = file_content[1:] file_message = pgpy.PGPMessage.new(file_content) encrypted_file_message = key.encrypt(file_message) with open(os.path.join(os.getcwd(), 'Orders.csv.pgp'), 'wb') as encrypted_file: encrypted_file.write(bytes(encrypted_file_message))
补充说明
如果解密后写入文件仍出现类似问题,确保写入时使用encoding='utf-8'(不带BOM)或encoding='utf-8-sig'(带BOM),根据需求选择即可。
内容的提问来源于stack exchange,提问作者notanothercliche
相关产品推荐
相关产品推荐

