Если вы хотите кодировать и декодировать текст, вот для чего нужны методы encode
и decode
:
>>> a = "Gżegżółka"
>>> b = a.encode('utf-8')
>>> b
b'G\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'
>>> c = b.decode('utf-8')
>>> c
'Gżegżółka'
Также обратите внимание, что UTF-8 уже используется по умолчанию, поэтому вы можете просто сделать это:
>>> b = a.encode()
>>> c = b.decode()
Единственная причина, по которой вам нужно указывать аргументы:
- Вам нужно использовать другую кодировку вместо UTF-8,
- Вам необходимо указать конкретный обработчик ошибок, например
'surrogatereplace'
вместо 'strict'
или
- Ваш код должен работать на Python 3.0-3.1 (который почти никто не использовал).
Однако, если вы действительно хотите, вы можете делать то, что вы уже делали; вам просто нужно явно указать кодировку в вызове str
, как вы это сделали в вызове bytes
:
>>> a = "Gżegżółka"
>>> b = bytes(a, 'utf-8')
>>> b
b'G\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'
>>> c = str(b, 'utf-8')
>>> c
Вызов str
для bytes
объекта без кодировки, как вы это делали, не декодирует его и не вызывает исключение, например, вызов bytes
для str
без кодировки, потому что основная задача str
- дать вам строковое представление объекта, а лучшее строковое представление bytes
объекта - это b'…'
.