str.encode() și bytes.decode() în Python

Metode pentru șiruri Python 3.0+

Transformă textul în octeți (encode) și octeții înapoi în text (decode), după o codificare.

Sintaxă
text.encode(encoding='utf-8', errors='strict')
octet.decode(encoding='utf-8', errors='strict')

Ce face str.encode() și bytes.decode()

Calculatorul salvează și trimite octeți, nu litere. encode() transformă un text (str) în bytes după o codificare, implicit UTF-8, în care literele românești ocupă câte 2 octeți. decode() face drumul invers.

Parametrul errors spune ce se întâmplă cu caracterele care nu pot fi codificate sau decodificate: 'strict' (eroare, implicit), 'ignore' (sunt omise), 'replace' (devin ? sau �), 'backslashreplace'.

Parametri

Parametru Descriere
encoding Codificarea: 'utf-8', 'latin-1', 'cp1250' (Windows, Europa Centrală; nu are literele ș și ț cu virgulă), 'ascii'…
errors Cum sunt tratate erorile.

Ce returnează

encode: bytes. decode: str.

Exemple

Exemplul 1: Text, octeți și înapoi

text = "Ștefan cel Mare"
octeti = text.encode("utf-8")
print(octeti)
print(len(text), "caractere,", len(octeti), "octeți")
print(octeti.decode("utf-8"))

Rezultat

b'\xc8\x98tefan cel Mare'
15 caractere, 16 octeți
Ștefan cel Mare

Exemplul 2: Codificări diferite și erori

octeti = "ăîâ".encode("cp1250")
print(octeti, octeti.decode("cp1250"))
try:
    "ș".encode("cp1250")
except UnicodeEncodeError as e:
    print("cp1250 nu are litera ș cu virgulă:", e.reason)
print("Brașov".encode("ascii", errors="replace"))
try:
    "ăîș".encode("utf-8").decode("ascii")
except UnicodeDecodeError as e:
    print("Eroare:", e.reason)
print(b"Bra\xc8\x99ov \xff".decode("utf-8", errors="replace"))

Rezultat

b'\xe3\xee\xe2' ăîâ
cp1250 nu are litera ș cu virgulă: character maps to <undefined>
b'Bra?ov'
Eroare: ordinal not in range(128)
Brașov �

Greșeli frecvente

  • Decodifici cu altă codificare decât cea folosită la codificare și obții caractere stricate (È™ în loc de ș). Folosește aceeași codificare la ambele capete, de preferat UTF-8.

Comenzi înrudite

  • bytes() și bytearray(): Secvențe de octeți (valori 0-255) pentru date binare: fișiere, rețea, text codificat.
  • str(): Tipul textelor (șiruri de caractere); str() transformă orice valoare în text.
  • open() și with: Deschide un fișier pentru citire sau scriere; cu with, fișierul este închis automat.
  • bytes.hex() și bytes.fromhex(): Transformă octeții în text hexazecimal și invers.