"ช่องว่างภายในที่ไม่ถูกต้อง" ไม่เพียง แต่หมายถึง "ช่องว่างภายในที่ขาดหายไป" แต่ยังหมายถึง "ช่องว่างภายในที่ไม่ถูกต้อง" ด้วย (เชื่อหรือไม่)
หากวิธีการ "เพิ่มช่องว่างภายใน" ที่แนะนำไม่ได้ผลให้ลองลบไบต์ต่อท้ายบางส่วน:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
อัปเดต: การเล่นซอเกี่ยวกับการเพิ่มช่องว่างภายในหรือการลบไบต์ที่อาจไม่ดีออกจากส่วนท้ายควรทำหลังจากลบช่องว่างใด ๆ มิฉะนั้นการคำนวณความยาวจะทำให้เสีย
เป็นความคิดที่ดีหากคุณแสดงตัวอย่าง (สั้น ๆ ) ของข้อมูลที่คุณต้องการกู้คืน แก้ไขคำถามและสำเนาของคุณ / print repr(sample)
วางผลมาจากการ
อัปเดต 2: เป็นไปได้ว่าการเข้ารหัสได้กระทำในลักษณะที่ปลอดภัยของ URL ในกรณีนี้คุณจะสามารถเห็นเครื่องหมายลบและขีดล่างในข้อมูลของคุณและคุณควรจะสามารถถอดรหัสได้โดยใช้base64.b64decode(strg, '-_')
หากคุณไม่เห็นอักขระลบและขีดล่างในข้อมูลของคุณ แต่สามารถเห็นอักขระบวกและเครื่องหมายทับแสดงว่าคุณมีปัญหาอื่น ๆ และอาจต้องใช้เทคนิคการเพิ่มช่องว่างหรือการลบจุดเริ่มต้น
หากคุณไม่เห็นเครื่องหมายลบขีดล่างบวกและทับในข้อมูลของคุณคุณจะต้องกำหนดอักขระทางเลือกสองตัว พวกเขาจะเป็นคนที่ไม่ได้อยู่ใน [A-Za-z0-9] จากนั้นคุณจะต้องทดลองเพื่อดูว่าต้องใช้ลำดับใดในอาร์กิวเมนต์ที่ 2 ของbase64.b64decode()
อัปเดต 3 : หากข้อมูลของคุณเป็น "ความลับของ บริษัท ":
(ก) คุณควรพูดอย่างนั้นล่วงหน้า
(ข) เราสามารถสำรวจช่องทางอื่น ๆ ในการทำความเข้าใจปัญหาซึ่งมีแนวโน้มสูงที่จะเกี่ยวข้องกับอักขระที่ใช้แทน+
และ/
ใน ตัวอักษรการเข้ารหัสหรือโดยการจัดรูปแบบอื่น ๆ หรืออักขระที่ไม่เกี่ยวข้อง
ช่องทางหนึ่งคือการตรวจสอบว่าอักขระที่ไม่เป็น "มาตรฐาน" ใดในข้อมูลของคุณเช่น
from collections import defaultdict
d = defaultdict(int)
import string
s = set(string.ascii_letters + string.digits)
for c in your_data:
if c not in s:
d[c] += 1
print d
base64.b64decode(strg, '-_')
หรือไม่? นั่นเป็นพื้นฐานโดยที่คุณไม่ต้องกังวลในการจัดหาข้อมูลตัวอย่างซึ่งเป็นวิธีแก้ปัญหาของ Python ที่น่าจะเป็นไปได้มากที่สุด "วิธีการ" ที่เสนอคือข้อเสนอแนะในการแก้ปัญหาโดยเฉพาะอย่างยิ่ง "ตีแล้วพลาด" เนื่องจากความไม่เพียงพอของข้อมูลที่ให้มา