Python中的base64解码问题

时间:2013-04-09 22:07:22

标签: python encoding base64 decoding

您好,感谢您的阅读。 我遇到了一些使用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(他一定听说过它是最好的......)。

1 个答案:

答案 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字节替换,您知道问题是您正在翻译换行符,反过来意味着你处于文本模式。