decode
Метод Юникода строк действительно не имеет каких - либо приложений на всех (если у вас есть какие - то не-текстовые данные в юникод строку для какой - то причине - см . Ниже) Я думаю, что в основном это происходит по историческим причинам. В Python 3 это полностью исчезло.
unicode().decode()
будет выполнять неявное кодирование с s
использованием кодека по умолчанию (ascii). Проверьте это так:
>>> 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)
Сообщения об ошибках точно такие же.
Для str().encode()
это наоборот - она пытается неявное декодирование в s
с кодировкой по умолчанию:
>>> 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)
Используется вот так, str().encode()
тоже лишнее.
Но есть другое применение последнего метода, который полезен: есть кодировки , которые не имеют ничего общего с наборами символов и, таким образом, могут быть применены к 8-битным строкам осмысленным способом:
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
Вы правы, хотя: неоднозначное использование «кодирования» для обоих этих приложений ... удивительно. Опять же, с отдельными byte
и string
типами в Python 3, это больше не проблема.