Python'da Base64 Encode: b64encode Tam Kılavuz
Ücretsiz Base64 Kodlayıcı Online aracını doğrudan tarayıcınızda kullanın — kurulum gerektirmez.
Base64 Kodlayıcı Online Online Dene →HTTP Basic Auth başlıklarında kimlik bilgisi ileten, API yanıtlarına ikili varlıklar gömen veya ortam değişkenlerinde TLS sertifikaları saklayan Python servisleri geliştirirken düzenli olarak base64 encode Python kodu yazmanız gerekir. Python, base64 modülünü standart kütüphaneyle birlikte sunar — pip kurulumu gerekmez — ancak bayt-dize farkı ve b64encode, urlsafe_b64encode ile encodebytes arasındaki fark geliştiricileri beklenenden daha sık yanıltır. Herhangi bir kod yazmadan hızlı kodlama için ToolDeck'in Base64 Kodlayıcısı bunu tarayıcıda anında gerçekleştirir. Bu kılavuz; tam stdlib API'sini, JWT'ler için URL-güvenli kodlamayı, dosya ve API yanıt senaryolarını, CLI kısayollarını, yüksek performanslı bir alternatifi ve kod incelemelerinde en sık gördüğüm dört hatayı kapsar.
- ✓base64.b64encode() bayt bekler, str değil — giriş dizesini geçirmeden önce her zaman .encode("utf-8") çağırın
- ✓Dönüş değeri de bayttır — JSON veya HTTP başlıklarına gömebileceğiniz düz bir str elde etmek için .decode("utf-8") veya .decode("ascii") çağırın
- ✓base64.urlsafe_b64encode() + → - ve / → _ karakterlerini değiştirir ancak = doldurmayı korur — JWT segmentleri için .rstrip("=") ile manuel olarak çıkarın
- ✓base64.encodebytes() her 76 karakterde bir \n ekler (MIME formatı) — veri URI'leri, JSON alanları veya ortam değişkenleri için asla kullanmayın
- ✓pybase64 (C uzantısı, aynı API) büyük yükler işleyen yüksek verimli servisler için standart kütüphaneye kıyasla 2–10× daha hızlı kodlar
Base64 Kodlama Nedir?
Base64, rastgele ikili veriyi 64 yazdırılabilir ASCII karakterinden oluşan bir dizgeye dönüştürür: A–Z, a–z, 0–9, + ve /. Her 3 giriş baytı tam olarak 4 Base64 karakterine eşlenir. Giriş uzunluğu 3'ün katı değilse bir veya iki = dolgu karakteri eklenir. Kodlanmış çıktı her zaman orijinalden yaklaşık %33 daha büyüktür.
Base64 şifreleme değildir— hiçbir gizlilik sağlamaz. Amacı aktarım güvenliğidir: birçok protokol ve depolama sistemi 7-bit ASCII metin için tasarlanmıştır ve rastgele ikili baytları güvenle taşıyamaz. Base64 bu boşluğu kapatır. Yaygın Python kullanım alanları arasında HTTP Basic Auth başlıkları, HTML veya CSS'e resim gömmek için veri URI'leri, JWT token segmentleri, e-posta MIME ekleri ve ikili blobları ortam değişkenleri veya JSON API'leri aracılığıyla iletmek yer alır.
deploy-svc:sk-prod-9f2a1c3e8b4d
ZGVwbG95LXN2Yzpzay1wcm9kLTlmMmExYzNlOGI0ZA==
base64.b64encode() — Örneklerle Standart Kodlama Kılavuzu
base64.b64encode(s, altchars=None), Python'ın stdlib'indeki birincil kodlama fonksiyonudur. Her Python kurulumunda bulunan base64 modülünde yer alır. Fonksiyon bir bytes nesnesi kabul eder ve ASCII Base64 gösterimini içeren bir bytes nesnesi döndürür. Bu kılavuz boyunca Python 3.x (3.6+) kullanıldığı varsayılmıştır.
Minimal çalışan örnek
import base64
# HTTP Basic Auth başlığı için bir API kimlik bilgisi çiftini kodlama
service_id = "deploy-svc"
api_key = "sk-prod-9f2a1c3e8b4d"
credential_bytes = f"{service_id}:{api_key}".encode("utf-8")
encoded_bytes = base64.b64encode(credential_bytes)
encoded_str = encoded_bytes.decode("ascii") # bayt → str
print(encoded_str)
# ZGVwbG95LXN2Yzpzay1wcm9kLTlmMmExYzNlOGI0ZA==
import urllib.request
req = urllib.request.Request("https://api.internal/v1/deployments")
req.add_header("Authorization", f"Basic {encoded_str}")
# Başlık değeri: Basic ZGVwbG95LXN2Yzpzay1wcm9kLTlmMmExYzNlOGI0ZA==Genişletilmiş örnek — sort_keys, iç içe nesneler, gidiş-dönüş kod çözme
import base64
import json
# Bir ortam değişkeni için yapılandırılmış sunucu yapılandırmasını kodlama
server_config = {
"host": "db-primary.eu-west-1.internal",
"port": 5432,
"database": "analytics_prod",
"max_connections": 150,
"ssl": {
"mode": "verify-full",
"cert_path": "/etc/ssl/certs/db-client.crt",
"reject_self_signed": True,
},
}
config_json = json.dumps(server_config, sort_keys=True)
encoded_bytes = base64.b64encode(config_json.encode("utf-8"))
encoded_str = encoded_bytes.decode("ascii")
print(encoded_str[:60] + "...")
# eyJkYXRhYmFzZSI6ICJhbmFseXRpY3NfcHJvZCIsICJob3N0IjogImRi...
# Kod çöz ve gidiş-dönüşü doğrula
decoded_json = base64.b64decode(encoded_str).decode("utf-8")
restored = json.loads(decoded_json)
print(restored["host"]) # db-primary.eu-west-1.internal
print(restored["ssl"]["mode"]) # verify-fullb64decode() varsayılan olarak toleranslıdır — boşluklar ve satır sonları dahil geçersiz karakterleri sessizce yoksayar. validate=True geçirerek Base64 dışı herhangi bir karakter için binascii.Error hatası alabilirsiniz. Harici sistemlerden gelen güvenilmez girişleri çözerken bunu kullanın.Python'da ASCII Olmayan ve Unicode Dizeleri Kodlama
Python 3 dizeleri varsayılan olarak Unicode'dur. base64 modülü str değil bytes üzerinde çalışır — bu nedenle dizeyi geçirmeden önce baytlara dönüştürmeniz gerekir. Kodlama seçimi önemlidir: UTF-8 her Unicode kod noktasını işler ve neredeyse tüm kullanım durumları için doğru varsayılandır.
import base64
# Çok dilli içeriği kodlama — uluslararası bir platformdan kullanıcı görünen adları
user_names = [
"Ahmet Yılmaz", # Türkçe — Latince genişletilmiş karakterler
"田中太郎", # CJK ideografları — UTF-8'de her biri 3 bayt
"Мария Соколова", # Kiril — U+041C ve üzeri
"Zeynep Kaya", # ASCII — karakter başına 1 bayt
]
for name in user_names:
encoded = base64.b64encode(name.encode("utf-8")).decode("ascii")
decoded = base64.b64decode(encoded).decode("utf-8")
print(f"Orijinal : {name}")
print(f"Kodlanmış : {encoded}")
print(f"Gidiş-dönüş: {decoded}")
print(f"Eşleşme : {name == decoded}")
print()
# Orijinal : Мария Соколова
# Kodlanmış : 0JzQsNGA0LjRjyDQodC+0LrQvtC70L7QstCw
# Gidiş-dönüş: Мария Соколова
# Eşleşme : Truebase64 Modülü — Fonksiyon Referansı
base64 modülü çeşitli kodlama fonksiyonları sunar. Pratikte karşılaşacağınız fonksiyonların tam referansı aşağıdadır:
| Fonksiyon | Giriş | Döndürür | Açıklama |
|---|---|---|---|
| b64encode(s, altchars=None) | bytes | bytes | Standart Base64 (RFC 4648 §4). altchars, + ve / karakterlerini iki özel baytla değiştirir. |
| b64decode(s, altchars=None, validate=False) | bytes | str | bytes | Standart Base64'ü çözer. validate=True, geçersiz giriş karakterlerinde binascii.Error fırlatır. |
| urlsafe_b64encode(s) | bytes | bytes | URL-güvenli Base64 (RFC 4648 §5). + ve / yerine - ve _ kullanır. = dolguyu korur. |
| urlsafe_b64decode(s) | bytes | str | bytes | URL-güvenli Base64'ü çözer. Dolgulu ve dolgusuz girişleri kabul eder. |
| encodebytes(s) | bytes | bytes | MIME Base64: her 76 karakterde \n ekler ve sona \n ekler. Yalnızca e-posta/MIME için. |
| decodebytes(s) | bytes | bytes | MIME Base64'ü çözer. Boşlukları ve gömülü satır sonlarını yoksayar. |
| b16encode(s) | bytes | bytes | Onaltılık kodlama (Base16). Her bayt iki büyük harf onaltılık karaktere dönüşür. Dolgu yok. |
| b32encode(s) | bytes | bytes | Base32 kodlama. A–Z ve 2–7 kullanır. Base64'ten daha büyük çıktı; TOTP sırlarında kullanılır. |
b64encode içindeki altchars parametresi, + ve / karakterlerini iki özel baytla değiştiren 2 baytlık bir nesne kabul eder. altchars=b'-_' geçirmek, dolguyu ayrı ayrı kontrol etmenize izin verirken urlsafe_b64encode ile özdeş çıktı üretir.
URL-Güvenli Base64 — JWT'ler ve Sorgu Parametreleri için urlsafe_b64encode()
Standart Base64, + ve /kullanır; bunların ikisi de URL'lerde ayrılmış karakterlerdir. Sorgu dizesindeki bir + boşluk olarak çözülür ve /yol ayırıcısıdır. Kodlanmış değer bir URL'de, dosya adında veya çerezde göründüğünde URL-güvenli varyanta ihtiyacınız vardır: urlsafe_b64encode(), + yerine - ve / yerine _ koyar.
JWT'ler tüm üç segment için (başlık, yük, imza) dolgu olmadanURL-güvenli Base64 kullanır. Dolgu manuel olarak çıkarılmalıdır — Python'ın stdlib'i onu korur.
JWT yük segmentini kodlama
import base64
import json
def encode_jwt_segment(data: dict) -> str:
"""Bir sözlüğü dolgu olmadan URL-güvenli Base64 dizesi olarak kodla (JWT formatı)."""
json_bytes = json.dumps(data, separators=(",", ":")).encode("utf-8")
return base64.urlsafe_b64encode(json_bytes).rstrip(b"=").decode("ascii")
def decode_jwt_segment(segment: str) -> dict:
"""URL-güvenli Base64 JWT segmentini çöz (eksik dolguyu işler)."""
# Dolguyu geri ekle: Base64 uzunluğun 4'ün katı olmasını gerektirir
padding = 4 - len(segment) % 4
padded = segment + ("=" * (padding % 4))
raw = base64.urlsafe_b64decode(padded)
return json.loads(raw)
# JWT başlığı ve yükü oluştur
header = {"alg": "HS256", "typ": "JWT"}
payload = {
"sub": "usr_7c3a9f1b2d",
"workspace": "ws_eu-west-1-prod",
"role": "data-engineer",
"iat": 1741824000,
"exp": 1741910400,
}
header_segment = encode_jwt_segment(header)
payload_segment = encode_jwt_segment(payload)
print(header_segment)
# eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
print(payload_segment)
# eyJzdWIiOiJ1c3JfN2MzYTlmMWIyZCIsIndvcmtzcGFjZSI6IndzX2...
# Gidiş-dönüşü doğrula
restored = decode_jwt_segment(payload_segment)
print(restored["role"]) # data-engineerurlsafe_b64decode(), Python 3.x'ten itibaren hem dolgulu hem de dolgusuz girişi kabul eder, ancak yalnızca karakterler URL-güvenli ise ( - ve _). Hiçbir zaman standart bir Base64 dizesini ( + veya / içeren) urlsafe_b64decode'a geçirmeyin — uyumsuz karakterler sessiz veri bozulmasına veya binascii.Error'a neden olur.Python'da Dosyaları ve API Yanıtlarını Kodlama
Üretim kodunda Base64 kodlama en yaygın olarak iletilen dosyaların etrafında ve ikili içerik sunan harici API'lerin yanıtları etrafında görünür. Her iki senaryo da bayt sınırının dikkatli işlenmesini gerektirir.
Diskten dosya okuyup kodlama
import base64
import json
from pathlib import Path
def encode_file_to_base64(file_path: str) -> str:
"""İkili dosyayı oku ve Base64 kodlu gösterimini döndür."""
try:
raw_bytes = Path(file_path).read_bytes()
return base64.b64encode(raw_bytes).decode("ascii")
except FileNotFoundError:
raise FileNotFoundError(f"Dosya bulunamadı: {file_path}")
except PermissionError:
raise PermissionError(f"Okuma izni reddedildi: {file_path}")
# Bir dağıtım manifestosuna TLS sertifikası ekle
cert_b64 = encode_file_to_base64("./ssl/service-client.crt")
deployment_manifest = {
"service": "payment-processor",
"environment": "production",
"region": "eu-west-1",
"tls": {
"client_cert": cert_b64,
"cert_format": "base64-pem",
},
}
# Manifesti yaz — sertifika güvenle dize olarak gömülü
with open("./dist/deployment-manifest.json", "w") as f:
json.dump(deployment_manifest, f, indent=2)
print(f"Sertifika kodlandı: {len(cert_b64)} karakter")Hata ayıklama için HTTP API yanıtını kodlama
import base64
import requests # pip install requests
def fetch_and_encode_binary(url: str, headers: dict | None = None) -> str:
"""Bir API'den ikili kaynak getir ve Base64 olarak döndür."""
response = requests.get(url, headers=headers or {}, timeout=10)
response.raise_for_status() # 4xx/5xx için HTTPError fırlatır
content_type = response.headers.get("Content-Type", "unknown")
encoded = base64.b64encode(response.content).decode("ascii")
print(f"İçerik Türü : {content_type}")
print(f"Ham boyut : {len(response.content):,} bayt")
print(f"Kodlanmış boy: {len(encoded):,} karakter")
return encoded
# Örnek: dahili faturalandırma API'sinden imzalı PDF fatura indir
invoice_b64 = fetch_and_encode_binary(
"https://billing.internal/api/v2/invoices/INV-2026-0042/pdf",
headers={"Authorization": "Bearer eyJhbGc..."},
)
# Bildirim yüküne ekle
notification = {
"recipient_id": "team-finance",
"invoice_id": "INV-2026-0042",
"attachment": {
"filename": "invoice-2026-0042.pdf",
"content": invoice_b64,
"content_type": "application/pdf",
"encoding": "base64",
},
}
print(f"Yük hazır: {len(str(notification)):,} karakter")Python'da Görüntü Dosyasını Base64 Olarak Kodlama
Bir görüntüyü Base64'e kodlamak ve veri URI olarak gömmek; HTML e-posta şablonları, PDF oluşturma ve bağımsız HTML anlık görüntüleri için standart yaklaşımdır. Tarayıcı kodlanmış dizeyi doğrudan yorumlar — ayrı bir görüntü isteği gerekmez. Aynı kalıp her türlü ikili dosya için çalışır: PNG, JPEG, SVG, WebP veya PDF.
import base64
import mimetypes
from pathlib import Path
def image_to_data_uri(image_path: str) -> str:
"""Bir görüntü dosyasını satır içi HTML gömme için Base64 veri URI'sine dönüştür."""
path = Path(image_path)
mime_type = mimetypes.guess_type(image_path)[0] or "image/octet-stream"
raw_bytes = path.read_bytes()
encoded = base64.b64encode(raw_bytes).decode("ascii")
return f"data:{mime_type};base64,{encoded}"
# Ürün görsellerini HTML e-posta şablonuna satır içi olarak göm
hero_uri = image_to_data_uri("./assets/product-hero-768px.png")
thumbnail_uri = image_to_data_uri("./assets/product-thumb-128px.webp")
html_fragment = f"""
<img src="{hero_uri}"
alt="Ürün hero görseli"
width="768" height="432"
style="display:block;max-width:100%" />
"""
print(f"PNG veri URI şununla başlar: {hero_uri[:60]}...")
# data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAA...data:image/svg+xml,{encoded}) genellikle Base64'ten daha küçüktür; çünkü SVG metin tabanlıdır ve Base64 boyutu ~%33 şişirir. Raster formatlar için (PNG, JPEG, WebP) Base64'ü, SVG için URL-kodlamayı kullanın.Büyük Dosyalarla Çalışma — Parçalı Base64 Kodlama
Path.read_bytes()ile tüm dosyayı belleğe yüklemek ~50 MB'a kadar dosyalar için uygundur. Bu eşiğin üzerinde, tepe bellek kullanımı önemli hale gelir — 200 MB'lık bir dosya ham baytlar için ~200 MB artı Base64 çıktısı için ~267 MB gerektirir; toplamda tek bir işlemde ~467 MB. Büyük dosyalar için bunun yerine parçalar halinde okuyun ve kodlayın.
Kritik kısıtlama: parça boyutu 3 baytın katıolmalıdır. Base64, 3 giriş baytını tam olarak 4 çıkış karakterine kodlar. Parça sınırı 3'ün katı olmayan bir yere denk gelirse, kodlayıcı akışın ortasına = dolgu ekler ve birleştirilmiş çıktıyı geçersiz kılar.
Dosyaya akışlı kodlama (tam dosya belleğe yüklemeden)
import base64
from pathlib import Path
CHUNK_SIZE = 3 * 1024 * 256 # 786.432 bayt — 3'ün katı, parça başına ~768 KB
def encode_large_file(input_path: str, output_path: str) -> int:
"""
Büyük ikili dosyayı tamamen belleğe yüklemeden Base64'e kodla.
Yazılan Base64 karakter sayısını döndürür.
"""
total_chars = 0
with open(input_path, "rb") as src, open(output_path, "w") as dst:
while True:
chunk = src.read(CHUNK_SIZE)
if not chunk:
break
encoded_chunk = base64.b64encode(chunk).decode("ascii")
dst.write(encoded_chunk)
total_chars += len(encoded_chunk)
return total_chars
# Varlık dağıtım manifesti için 300 MB ürün videoyu kodla
chars_written = encode_large_file(
"./uploads/product-demo-4k.mp4",
"./dist/product-demo-4k.b64",
)
print(f"Kodlandı: {chars_written:,} Base64 karakter")
# Kodlandı: 407.374.184 Base64 karakterİkili varlık dizinini kodlama (NDJSON çıktısı)
import base64
import json
from pathlib import Path
def encode_assets_to_ndjson(asset_dir: str, output_path: str) -> int:
"""
Bir dizindeki tüm ikili dosyaları NDJSON manifestosuna kodla.
Her satır bir JSON nesnesidir: {"path": "...", "mime": "...", "data": "<base64>"}
İşlenen dosya sayısını döndürür.
"""
import mimetypes
asset_path = Path(asset_dir)
count = 0
with open(output_path, "w") as out:
for file_path in sorted(asset_path.rglob("*")):
if not file_path.is_file():
continue
mime = mimetypes.guess_type(str(file_path))[0] or "application/octet-stream"
encoded = base64.b64encode(file_path.read_bytes()).decode("ascii")
record = {"path": str(file_path.relative_to(asset_path)), "mime": mime, "data": encoded}
out.write(json.dumps(record) + "\n")
count += 1
return count
processed = encode_assets_to_ndjson("./dist/static/", "./dist/asset-bundle.ndjson")
print(f"{processed} dosya NDJSON varlık paketine kodlandı")read_bytes()'dan parçalı okumaya geçin. 50 MB altındaki dosyalar için daha basit b64encode(path.read_bytes()).decode() tek satırı daha hızlı ve anlaşılması daha kolaydır.Python ile Komut Satırı Base64 Kodlama
Python, base64 modülü için bir CLI arayüzü sunar — ek araçlara gerek yoktur. Çapraz platform çalışır; bu da CI boru hatlarında ve sistem base64 komutunun mevcut olmayabileceği Windows ortamlarında kullanışlı kılar.
# ── python -m base64 ─────────────────────────────────────────────────── # Bir dizeyi kodla (stdin üzerinden aktar) echo -n "deploy-svc:sk-prod-9f2a1c3e8b4d" | python3 -m base64 # ZGVwbG95LXN2Yzpzay1wcm9kLTlmMmExYzNlOGI0ZA== # Bir dosyayı kodla python3 -m base64 ./ssl/service-client.crt # Bir Base64 dizesini çöz echo "ZGVwbG95LXN2Yzpzay1wcm9kLTlmMmExYzNlOGI0ZA==" | python3 -m base64 -d # Base64 dosyasını ikili olarak geri çöz python3 -m base64 -d ./dist/service-client.b64 > ./restored.crt # ── Python tek satır — çapraz platform, Windows'ta çalışır ──────────── # Bir dizeyi kodla python3 -c "import base64,sys; print(base64.b64encode(sys.argv[1].encode()).decode())" "my-secret" # bXktc2VjcmV0 # URL-güvenli kodlama (dolgu yok) python3 -c "import base64,sys; print(base64.urlsafe_b64encode(sys.argv[1].encode()).rstrip(b'=').decode())" "my-secret" # bXktc2VjcmV0 # Bir dosyayı satır içi kodla (sonuç stdout'a) python3 -c "import base64,sys; print(base64.b64encode(open(sys.argv[1],'rb').read()).decode())" ./config.json
base64 komutunun aksine, python -m base64 varsayılan olarak çıktıyı 76 karakterde sarmaz. Çıktı tek kesintisiz bir satırdır; bu da ortam değişkenleri, JSON alanları ve HTTP başlıkları için istediğiniz şeydir. Herhangi bir işletim sisteminde sistem base64'ünün yerine kullanın.Yüksek Performanslı Alternatif: pybase64
Python'ın stdlib base64modülü saf Python'da uygulanmıştır (CPython'da ince bir C katmanıyla). Büyük yükleri yüksek verimle kodlayan servisler için — görüntü işleme boru hatları, toplu dışa aktarma işleri, gerçek zamanlı telemetri alımı — pybase64, SIMD hızlandırmalı C kütüphanesi libbase64 tarafından desteklenen birebir değiştirimdir. Kıyaslamalar, yük boyutuna ve CPU mimarisine bağlı olarak 2–10× verim iyileşmesi gösterir.
pip install pybase64
import pybase64
import time
# pybase64 birebir değiştirme — stdlib ile aynı fonksiyon imzaları
sample_payload = b"x" * (1024 * 1024) # 1 MB ikili veri
# Standart kodlama — base64.b64encode() ile özdeş çıktı
encoded = pybase64.b64encode(sample_payload)
decoded = pybase64.b64decode(encoded)
assert decoded == sample_payload
# URL-güvenli kodlama — base64.urlsafe_b64encode() ile özdeş çıktı
url_safe = pybase64.urlsafe_b64encode(sample_payload)
# b64encode_as_string() doğrudan str döndürür — .decode() çağrısı gerekmez
telemetry_event = b'{"event":"page_view","session_id":"sess_3a7f91c2","ts":1741824000}'
encoded_str: str = pybase64.b64encode_as_string(telemetry_event)
print(encoded_str[:48] + "...")
# eyJldmVudCI6InBhZ2VfdmlldyIsInNlc3Npb25faWQi...
# Verim karşılaştırması (yaklaşık, donanıma göre değişir)
# stdlib base64.b64encode(1 MB): ~80 MB/s
# pybase64.b64encode(1 MB): ~800 MB/s (AVX2 CPU'da SIMD yolu)Profil oluşturma Base64 kodlamayı darboğaz olarak gösterdiğinde veya ~100 KB'ın üzerindeki yükleri tekrar tekrar kodladığınızda pybase64'e geçin. Küçük dizelerin (kimlik bilgileri, tokenlar) tek seferlik kodlanması için stdlib yeterince hızlıdır ve kurulum bağımlılığı yoktur.
Sözdizimi Vurgulama ile Terminal Çıktısı
Terminalde Base64 kodlu yüklerde hata ayıklarken — özellikle JSON yapılandırmaları veya JWT içerikleri — rich kütüphanesi ham bir dökümden çok daha okunması kolay sözdizimi vurgulu, girintili çıktı verir. CLI araçlarında, hata ayıklama betiklerinde ve REPL oturumlarında özellikle kullanışlıdır.
pip install rich
import base64
import json
from rich import print as rprint
from rich.syntax import Syntax
from rich.console import Console
console = Console()
def decode_and_pretty_print(encoded: str, label: str = "Çözülen yük") -> None:
"""Base64 dizesini çöz, JSON olarak ayrıştır ve sözdizimi vurgulama ile yazdır."""
raw_bytes = base64.b64decode(encoded + "==") # toleranslı dolgu
try:
parsed = json.loads(raw_bytes)
pretty = json.dumps(parsed, indent=2, ensure_ascii=False)
syntax = Syntax(pretty, "json", theme="monokai", line_numbers=False)
console.rule(f"[bold blue]{label}")
console.print(syntax)
except json.JSONDecodeError:
# JSON değil — ham metin yazdır
console.rule(f"[bold yellow]{label} (ham metin)")
rprint(raw_bytes.decode("utf-8", errors="replace"))
# Başarısız kimlik doğrulama isteğinden JWT yük segmentini incele
jwt_payload_segment = "eyJzdWIiOiJ1c3JfN2MzYTlmMWIyZCIsInJvbGUiOiJkYXRhLWVuZ2luZWVyIiwiZXhwIjoxNzQxOTEwNDAwfQ"
decode_and_pretty_print(jwt_payload_segment, "JWT Yükü")richçıktısını yalnızca terminal gösterimi için kullanın — hata ayıklama, stdout'a günlükleme veya etkileşimli CLI araçları için. Hiçbir zaman Base64 çıktısını dosyalara yazmak, API uç noktalarından döndürmek veya ortam değişkenlerinde saklamak için kullanmayın; rich, veriyi bozan ANSI kaçış kodları ekler.Yaygın Hatalar
Base64 kodlamalı birçok Python kod tabanı inceledim ve bu dört hata tutarlı biçimde ortaya çıkıyor — genellikle ASCII olmayan giriş veya bir ikili dosya üretim ortamında kodlama yoluna girene kadar keşfedilemiyor.
Hata 1 — b64encode()'a bytes yerine str geçirme
Sorun: b64encode() bir bytes nesnesi bekler. str geçirmek hemen TypeError: a bytes-like object is required hatasını fırlatır. Çözüm: kodlamadan önce dize üzerinde her zaman .encode("utf-8") çağırın.
import base64 # ❌ TypeError: a bytes-like object is required, not 'str' webhook_secret = "wh-secret-a3f91c2b4d" encoded = base64.b64encode(webhook_secret) # çöküyor
import base64
# ✅ Önce str'yi bytes'a dönüştür
webhook_secret = "wh-secret-a3f91c2b4d"
encoded = base64.b64encode(webhook_secret.encode("utf-8"))
# b'd2gtc2VjcmV0LWEzZjkxYzJiNGQ='Hata 2 — Bayt sonucunu .decode() etmeyi unutma
Sorun: b64encode(), str değil bytes döndürür. Bunu doğrudan bir f-dizesine gömmek çıktıda b'...' üretir; bu geçersiz bir HTTP başlık değeridir ve JSON serileştirmesini bozar. Çözüm: kodlanmış sonuç üzerinde her zaman .decode("ascii") çağırın.
import base64
credential = base64.b64encode(b"svc-monitor:sk-7f3a1b")
# ❌ Authorization başlığı "b'c3ZjLW1vbml0b3I6c2stN2YzYTFi'" içeriyor
headers = {"Authorization": f"Basic {credential}"}import base64
credential = base64.b64encode(b"svc-monitor:sk-7f3a1b").decode("ascii")
# ✅ Authorization: Basic c3ZjLW1vbml0b3I6c2stN2YzYTFi
headers = {"Authorization": f"Basic {credential}"}Hata 3 — b64encode() gerektiği yerde encodebytes() kullanma
Sorun: encodebytes() her 76 karakterde bir \nekler (MIME satır sarma) ve sona satır sonu ekler. Bunu bir JSON alanında, ortam değişkeninde veya veri URI'sinde saklamak değeri bozan gerçek satır sonu karakterleri gömer. Çözüm: MIME e-posta oluşturma dışında her yerde b64encode() kullanın.
import base64, json
cert_bytes = open("./ssl/root-ca.crt", "rb").read()
# ❌ encodebytes() her 76 karakterde \n ekler — JSON ve env değişkenlerini bozar
cert_b64 = base64.encodebytes(cert_bytes).decode()
config = json.dumps({"ca_cert": cert_b64}) # dize değeri içinde satır sonlarıimport base64, json
from pathlib import Path
cert_bytes = Path("./ssl/root-ca.crt").read_bytes()
# ✅ b64encode() tek kesintisiz dize üretir
cert_b64 = base64.b64encode(cert_bytes).decode("ascii")
config = json.dumps({"ca_cert": cert_b64}) # temiz tek satırlı değerHata 4 — URL-güvenli Base64'ü standart çözücüyle çözme
Sorun: URL-güvenli Base64, + ve / yerine - ve _ kullanır. URL-güvenli bir dizeyi b64decode()'a geçirmek, bu karakterleri içeren herhangi bir segment için sessizce yanlış baytlar üretir — varsayılan olarak hiçbir istisna fırlatılmaz. Çözüm: URL-güvenli giriş için urlsafe_b64decode() kullanın veya uyumsuzluğu erken tespit etmek için validate=True geçirin.
import base64 # ❌ JWT yük segmenti URL-güvenli Base64 kullanır (- ve _) # b64decode() bu karakterler için sessizce yanlış baytlar üretir jwt_segment = "eyJzdWIiOiJ1c3JfN2MzYTlmMWIyZCIsInJvbGUiOiJhZG1pbiJ9" wrong = base64.b64decode(jwt_segment) # - veya _ varsa sessizce yanlış
import base64
# ✅ JWT ve URL-güvenli giriş için urlsafe_b64decode() kullanın
jwt_segment = "eyJzdWIiOiJ1c3JfN2MzYTlmMWIyZCIsInJvbGUiOiJhZG1pbiJ9"
padding = 4 - len(jwt_segment) % 4
raw = base64.urlsafe_b64decode(jwt_segment + "=" * (padding % 4))
# b'{"sub":"usr_7c3a9f1b2d","role":"admin"}'Python Base64 Yöntemleri — Hızlı Karşılaştırma
| Yöntem | Giriş türleri | URL-güvenli karakter | Dolgu | Satır sonu | Döndürür | Kurulum gerekir |
|---|---|---|---|---|---|---|
| b64encode() | bytes, bytearray, memoryview | ❌ + ve / | ✅ = dolgu | ❌ yok | bytes | Hayır |
| urlsafe_b64encode() | bytes, bytearray, memoryview | ✅ - ve _ | ✅ = dolgu | ❌ yok | bytes | Hayır |
| b64encode(altchars=b"-_") | bytes, bytearray, memoryview | ✅ özel 2 karakter | ✅ = dolgu | ❌ yok | bytes | Hayır |
| encodebytes() | bytes, bytearray, memoryview | ❌ + ve / | ✅ = dolgu | ✅ her 76 karakterde \n | bytes | Hayır |
| pybase64.b64encode() | bytes, bytearray, memoryview | ❌ + ve / | ✅ = dolgu | ❌ yok | bytes | pip install |
| pybase64.b64encode_as_string() | bytes, bytearray, memoryview | ❌ + ve / | ✅ = dolgu | ❌ yok | str | pip install |
Kullanım durumlarının büyük çoğunluğu için b64encode()'u tercih edin: HTTP başlıkları, JSON alanları, ortam değişkenleri ve veri URI'leri. Kodlanmış değer bir URL'de, dosya adında, çerezde veya JWT segmentinde görüneceğinde urlsafe_b64encode()'e geçin. encodebytes()'ı yalnızca MIME e-posta ekleri oluştururken kullanın — satır sarma MIME spesifikasyonu tarafından gereklidir ancak diğer her şeyi sessizce bozar. ~100 KB'ın üzerindeki yükleri sık kodlayan bir yolda pybase64'e uzanın.
Sıkça Sorulan Sorular
İlgili Araçlar
Herhangi bir Python kodu yazmadan tek tıkla kodlama veya kod çözme için dizenizi ya da dosyanızı doğrudan Base64 Kodlayıcı'ya yapıştırın — kurulum gerektirmeden tarayıcınızda standart ve URL-güvenli modları anında işler.
Maria is a backend developer specialising in Python and API integration. She has broad experience with data pipelines, serialisation formats, and building reliable server-side services. She is an active member of the Python community and enjoys writing practical, example-driven guides that help developers solve real problems without unnecessary theory.
Priya is a data scientist and machine learning engineer who has worked across the full Python data stack — from raw data ingestion and cleaning to model deployment and monitoring. She is passionate about reproducible research, Jupyter-based workflows, and the practical engineering side of ML. She writes about NumPy, Pandas, data serialisation, and the Python patterns that make data pipelines reliable at scale.