今天处理邮件的时候,处理一个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)
问题解决。