Jaka jest różnica między kodowaniem / dekodowaniem?

Nigdy nie byłem pewien, czy rozumiem różnicę między dekodowaniem i kodowaniem str / unicode.

Wiem, że str (). Decode ()ma zastosowanie, gdy masz ciąg bajtów, który, jak wiadomo, ma pewne kodowanie znaków, biorąc pod uwagę nazwę kodowania, zwróci ciąg znaków Unicode.

Wiem, że unicode (). Encode () konwertuje znaki Unicode na ciąg bajtów zgodnie z podaną nazwą kodowania.

Ale nie rozumiem, do czego służą str (). Encode ()i unicode (). Decode (). Czy ktoś może mi to wyjaśnić?

1 odpowiedź

Metoda dekodowania ciągów Unicode tak naprawdę nie ma żadnych aplikacji (chyba że z jakiegoś powodu masz jakieś nietekstowe dane w ciągu Unicode - patrz poniżej).

unicode (). decode ()wykona niejawne kodowanie s przy użyciu domyślnego kodeka (ascii). Sprawdź to w ten sposób:

>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)

>>> s.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)

Komunikaty o błędach są dokładnie takie same.

W przypadku str (). Encode ()jest na odwrót - próbuje niejawnego dekodowania s z domyślnym kodowaniem:

>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)

Używany w ten sposób str (). Encode () jest również zbędny.

Istnieje jednak inna aplikacja tej drugiej metody, która jest użyteczna: istnieją kodowania, które nie mają nic wspólnego z zestawami znaków, a zatem mogą być zastosowane do ciągów 8-bitowych w znaczący sposób:

>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.