您好,感谢您的阅读。 我遇到了一些使用base64解码以前编码的文件的问题。 例如,假设我想使用base64编码pdf文件。结果是一个很好的80字符分隔的字符串系列。 执行编码的代码(从这个板上完成)非常简单:
def encode_file_base64(bin_input):
flag = 0
try:
with open(bin_input, 'rb') as fin, open('tmp.bin_hex', 'w') as fout:
base64.encode(fin, fout)
except:
traceback.print_exc()
flag = -1
return flag
现在解码功能:
def decode_file_base64(bin_output):
flag = 0
try:
with open('tmp.bin_hex', 'rb') as fin, open(bin_output, 'w') as fout:
base64.decode(fin, fout)
except:
traceback.print_exc()
flag = -1
return flag
它完成了这项工作,但是当我尝试打开输出文件时,我无法将文件显示为“损坏”。 我一直在努力解决这个问题,而且我将要放弃。我想我可以使用其他类型的编码,但BOSS坚持使用base64(他一定听说过它是最好的......)。
答案 0 :(得分:3)
我不知道这是不是你的问题(我甚至不知道你的问题是什么),但是如果你在平台/版本/实现中,二进制模式会产生影响,那么你正在做错了:
with open('tmp.bin_hex', 'rb') as fin, open(bin_output, 'w') as fout:
您正在以二进制模式打开文本文件(以文本模式编写的b64文件),以文本模式打开二进制文件。试试这个:
with open('tmp.bin_hex', 'r') as fin, open(bin_output, 'wb') as fout:
同时,出于调试目的,您可能希望尝试将文件与编码和解码结果进行比较。例如,如果您看到新文件稍长,并且hexdump显示这是因为每个0x0A字节已被两个0x0D 0x0A字节替换,您知道问题是您正在翻译换行符,反过来意味着你处于文本模式。