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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:50:16