Вам необходимо знать кодировку, используемую для создания этих байтов.Кодировка по умолчанию зависит от платформы, вы проверяете свою:
import sys
sys.getdefaultencoding() # 'utf-8' on macos python 3.7
Если вы передадите строку в pickle.dumps
, она будет кодировать ее с использованием кодировки по умолчанию, если вы хотите использовать другую кодировку, вы можете закодировать строкуперед передачей его в pickle.dumps
(в качестве примера).
In [2]: pickle.dumps('höy') # will be 'utf-8' encoded by default
Out[2]: b'\x80\x03C\x04h\xc3\xb6yq\x00.'
In [3]: 'höy'.encode('utf-8')
Out[3]: b'h\xc3\xb6y' # compare with the previous output
In [4]: pickle.dumps('höy'.encode('latin1'))
Out[4]: b'\x80\x03C\x03h\xf6yq\x00.'
In [5]: 'höy'.encode('latin1')
Out[5]: b'h\xf6y' # compare with the previous output
На основе кодировок вы можете декодировать ваши строки:
In [1]: 'höy'.encode('utf-8').decode('utf-8')
Out[1]: 'höy'
In [2]: 'höy'.encode('latin-1').decode('latin-1')
Out[2]: 'höy'
Использование неправильной кодировки приведет к сбою илиневерный результат:
In [3]: 'höy'.encode('utf-8').decode('latin-1')
Out[3]: 'höy'
И не каждый случайный набор байтов является закодированной строкой:
In [6]: pickle.dumps('höy').decode('utf-8')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-6-2b1872a5aa1a> in <module>
----> 1 pickle.dumps('höy').decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte