簡體   English   中英

Python中的base64解碼問題

[英]issues with base64 decoding in Python

您好,感謝您的閱讀。 我在使用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(他一定聽說過這是最好的……)。

我不知道這是否是您的問題(我什至都​​不知道您的問題是什么),但是如果您使用的是二進制模式有所作為的平台/版本/實現,那么您做錯了:

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:

同時,出於調試目的,您可能希望嘗試將文件與編碼和解碼結果進行比較。 例如,如果您看到新文件更長,並且十六進制轉儲表明這是因為每個0x0A字節已被兩個0x0D 0x0A字節替換,則您知道問題在於您正在翻譯換行符,依次表示您處於文本模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM