Метод decode не преобразовывает некоторые символы в строку
У меня есть массив с индексами символов из таблицы utf-8:
[190, 123, 201, 72, 52, 166, 102, 60].
При использовании функции bytes тоже все нормально отображается:
b'\xbe{\xc9H4\xa6f<'
Но при попытке использовать метод decode возникает ошибка:
a = [190, 123, 201, 72, 52, 166, 102, 60] # индексы символов из таблицы(utf-8)
b = bytes(a) # b'\xbe{\xc9H4\xa6f<'
c = b.decode('utf-8') # тут происходит ошибка
Если в decode добавить параметр "ignore" я получаю только [123, 72, 52, 102, 32, 60], но мне необходимы и оставшиеся символы.
Из-за чего это может происходить ?
P.S Откуда взялись эти числа
Ситуация следующая: У меня есть текст, который я перевёл в формат list("some_text".encode("utf-8")). После этого у меня выполняется des шифрование, и в результате я получаю список "символов указанный выше".
Ответы (3 шт):
a = [190, 123, 201, 72, 52, 166, 102, 60]
b = bytes(a)
c = b.decode('Windows-1251')
>>> c
'ѕ{ЙH4¦f<'
А вы уверены, что на входе валидный utf-8? Например, ваши байты без проблем декодируются в кодировке latin1.
>>> c = b.decode('latin1')
>>> print(c)
¾{ÉH4¦f<
После этого у меня выполняется des шифрование, и в результате я получаю список "символов указанный выше".
На выходе шифрования DES вы получаете массив байт, которому не соответствуют никакие символы, это просто байты. Есть стандарты шифрования, которые получают на вход текст и выдают на выход тоже текст (обычно это старые, "человеческие" шифры, которые делались вручную по таблицам), но DES это не такой стандарт, он получает на вход байты и на выходе у него тоже байты. Да, ему можно подать на вход байты, соответствующие некоему тексту в некоей кодировке, но на выходе после шифрования у него будут просто байты, уже не соответствующие никакой кодировке. Их можно представить, например, в виде шестнадцатеричного текстового представления этих байтов, но это и всё, никакому тексту в определённой кодировке из эти байты не соответствуют.
