型如=?gb2312?B?的转码

今天处理邮件的时候,处理一个EXCEL中的文件,格式如图:
=?gb2312?B?0MK1xCBPdXRsb29rIEV4cHJlc3Mg08O7pw==?=
(我找不到之前的数据了,只能拿网上的数据来补)

大概逻辑是:

Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用‘=’,因此编码后输出的文本末尾可能会出现1或2个‘=’。
用?分隔数据。
在这里插入图片描述

第一个字符GB2312的意思是:这个文件是GB2312转码的,第二个b的意思是:现在是以base64格式储存。

然后,按照?分隔数据后,第一个和最后一个为空,三四位是编码规则,第五位是实际数据。
——————————————————————————————
如果只是一次性的,网上有个网页:

http://tools.jb51.net/tools/base64_decode-gb2312.php

在这里插入图片描述
如果想要批量转,还是要写脚本的。

——————————————————————————

踩了几个坑:
我以为BASE64是bytes,没弄对。
我以为系统自带base64不需要导入,但是实际上是系统自带但是需要导入。

脚本真的没啥能动的,就这几行:
在这里插入图片描述

结果也成功导出:

在这里插入图片描述
代码:

import base64
name = '=?gb2312?B?0MK1xCBPdXRsb29rIEV4cHJlc3Mg08O7pw==?='
data = name.split('?')[3]
data = bytes(data, encoding='utf-8')
data = base64.b64decode(data)
data = data.decode(encoding='gbk', errors='replace')
print(data)

问题解决。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值