Sobes.tech
Junior

Ako zakódovať a dekódovať reťazce v Pythone?

sobes.tech AI

Odpoveď od AI

Kódovanie (encode) prevedie reťazec (Unicode) na bajty pomocou určitého kódovania (napríklad UTF-8). Dekódovanie (decode) vykoná opačnú transformáciu: z bajtov na reťazec.

# Kódovanie reťazca do bajtov
string_to_encode = "Ahoj, svet!"
encoded_bytes = string_to_encode.encode('utf-8')
# Teraz je encoded_bytes sekvenciou bajtov reprezentujúcou reťazec v UTF-8

# Dekódovanie bajtov späť na reťazec
decoded_string = encoded_bytes.decode('utf-8')
# Teraz je decoded_string opäť reťazec "Ahoj, svet!"

# Spracovanie chýb pri kódovaní/dekódovaní
# Ak reťazec obsahuje znaky, ktoré nie sú podporované daným kódovaním, alebo bajty nevytvárajú platnú sekvenciu pre kódovanie
invalid_byte_sequence = b'\xcd\xa1' # Príklad neplatnej sekvencie bajtov pre UTF-8
try:
    invalid_byte_sequence.decode('utf-8', errors='strict') # Predvolená hodnota errors='strict' - vyvolá UnicodeDecodeError
except UnicodeDecodeError as e:
    print(f"Chyba dekódovania: {e}")

# Použitie iných režimov spracovania chýb
# errors='ignore' - ignoruje nesprávne znaky/bajty
decoded_ignore = invalid_byte_sequence.decode('utf-8', errors='ignore')
print(f"Dekódované s ignorovaním: {decoded_ignore}") # Vypíše prázdny reťazec

# errors='replace' - nahradí nesprávne znaky/bajty znakom náhrady (zvyčajne '?')
decoded_replace = invalid_byte_sequence.decode('utf-8', errors='replace')
print(f"Dekódované s nahradením: {decoded_replace}") # Vypíše '' alebo podobný znak náhrady

# errors='xmlcharrefreplace' (len pre kódovanie do ASCII) - nahradí znaky ich XML entitami
string_with_umlaut = "München"
try:
    string_with_umlaut.encode('ascii', errors='xmlcharrefreplace')
except UnicodeEncodeError as e:
    print(f"Chyba kódovania do ASCII: {e}") # ASCII nepodporuje 'ü'

encoded_xmlcharrefreplace = string_with_umlaut.encode('ascii', errors='xmlcharrefreplace')
print(f"Kódované s nahradením XML entítami: {encoded_xmlcharrefreplace}") # Vypíše b'München'

Metódy .encode() a .decode() prijímajú voliteľný argument encoding (štandardne UTF-8 v Pythone 3, ale je vhodné ho explicitne uviesť) a errors.

Bežné kódovania zahŕňajú:

  • utf-8
  • latin-1
  • cp1251

Pri práci so súbormi je dôležité uviesť kódovanie pri otváraní, napríklad open('súbor.txt', 'r', encoding='utf-8').