سطح مقدماتی (Beginner Level)
ماژول base64 در پایتون یکی از ابزارهای استاندارد برای تبدیل دادههای باینری (Binary) به متن اسکی (ASCII) است. این کار زمانی مفید است که میخواهید دادههای باینری مانند تصاویر یا فایلها را از طریق پروتکلهایی که فقط متن را پشتیبانی میکنند (مانند JSON یا ایمیل) ارسال کنید.
مفهوم کدگذاری و کدگشایی (Encoding & Decoding)
در سادهترین حالت، ما یک رشته بایت (Bytes) داریم و میخواهیم آن را به فرمت Base64 تبدیل کنیم تا قابل انتقال باشد.
- b64encode: تبدیل بایت به فرمت Base64.
- b64decode: برگرداندن فرمت Base64 به بایت اصلی.
نکته مهم: ورودی توابع base64 باید از نوع bytes باشد، نه string. بنابراین ابتدا رشتهها را encode() میکنیم.
مثال ۱: تبدیل متن ساده به Base64
در این مثال، یک پیام متنی را به فرمت Base64 تبدیل میکنیم تا ببینیم خروجی چگونه تغییر میکند.
مثال ۲: بازگردانی (Decode) به حالت اولیه
حالا همان رشتهی Base64 را دریافت کرده و به متن قابل خواندن تبدیل میکنیم.
کار با دادههای باینری (تصاویر)
یکی از کاربردهای اصلی Base64، ذخیره تصاویر کوچک داخل دیتابیس یا ارسال آنها در API است.
مثال ۳: شبهکد خواندن تصویر و تبدیل به رشته
این کد استاتیک است زیرا به فایل تصویر خارجی نیاز دارد.
import base64
def image_to_base64(image_path):
with open(image_path, "rb") as image_file:
# خواندن فایل به صورت باینری
binary_data = image_file.read()
# تبدیل به Base64
base64_data = base64.b64encode(binary_data)
# تبدیل به رشته برای استفاده در JSON یا HTML
return base64_data.decode('utf-8')
# usage
# img_str = image_to_base64("logo.png")
سطح پیشرفته (Professional Level)
در سطح حرفهای، با انواع مختلف استاندارد Base64 (مانند URL-Safe)، مدیریت خطاها و نکات پرفرمنس در کار با دادههای حجیم آشنا میشویم.
استاندارد URL-Safe Base64
استاندارد معمولی Base64 از کاراکترهای + و / استفاده میکند. این کاراکترها در URLها معنی خاصی دارند و میتوانند باعث خرابی لینک شوند. متد urlsafe_b64encode این کاراکترها را با - و _ جایگزین میکند.
مثال ۱: مقایسه استاندارد معمولی و URL-Safe
در این مثال میبینیم که چگونه خروجیها برای استفاده در لینکها امن میشوند.
مدیریت Padding (علامت =)
فرمت Base64 طول خروجی را به مضربی از 4 میرساند و جاهای خالی را با = پر میکند. در برخی سیستمها این = حذف میشود. پایتون هنگام دیکود کردن اگر Padding درست نباشد، خطای binascii.Error میدهد.
مثال ۲: رفع خطای Missing Padding
یک تابع حرفهای برای دیکود کردن رشتههایی که ممکن است = آنها حذف شده باشد.
توابع کمکی (Encode/Decode Strings)
ماژول base64 به جز b64encode دارای توابع سطح بالاتری مثل encodebytes است که برای جریانهای داده قدیمیتر کاربرد داشت، اما در پایتون ۳ مدرن، تمیزترین روش کار مستقیم با بایتهاست. با این حال، استفاده از توابع base64.encode و base64.decode برای خواندن و نوشتن مستقیم روی فایلها بسیار کارآمد است.
مثال ۳: نوشتن مستقیم فایل Base64
این روش برای فایلهای بزرگ بهینه است زیرا نیازی نیست کل فایل را در حافظه بارگذاری کنید.
import base64
# Static: Requires existing files
def convert_file_to_b64_file(input_path, output_path):
with open(input_path, 'rb') as fin, open(output_path, 'wb') as fout:
base64.encode(fin, fout)
def convert_b64_file_to_file(input_path, output_path):
with open(input_path, 'rb') as fin, open(output_path, 'wb') as fout:
base64.decode(fin, fout)