#python #encoding #utf-8
#python #кодирование #utf-8
Вопрос:
Неверный результат при кодировании
Я попытался преобразовать строку в байт в шестнадцатеричном формате с помощью encode (), но не удалось. Ниже приведен мой код, я ожидал, что xFF станет xFF , но в итоге результатом будет xc3.
Могу я узнать, почему?
Ввод: x ="x00x00xFFx00xFFx00"
Ввод: x.encode()
Вывод: b'x00x00xc3xbfx00xc3xbfx00'
Комментарии:
1. Что вы хотите в качестве выходных данных?
bytes
Объект?2. На выходе вы получаете байты, которые у вас получатся, если вы закодируете эту строку из 6 символов как UTF-8. Для меня все выглядит нормально — чего вы ожидали? Обратите внимание, что если вы это сделаете,
y = x.encode()
а затемy.decode()
вы получитеx
обратно точно так же, как и раньше.
Ответ №1:
Кодировкой по умолчанию для string.encode() является UTF-8. UTF-8 кодирует символы с числовыми десятичными кодами 0-127 в качестве их числовых значений. Он кодирует значения, превышающие 127, в виде двух или более байтов в зависимости от кодируемого символа.
Кодировка UTF-8 для 0 равна 0. Кодировкой UTF-8 для ‘xFF’ (255) является ‘xc3 xbf’.
Итак, если вы замените свой ввод кодировкой UTF-8 для каждого из 6 байтов в этом вводе, вы получите свой результат.
Ответ №2:
Если вам нужен эквивалентный объект bytes, в отличие от закодированной строки, вы можете получить его следующим образом:
>>> x ="x00x00xFFx00xFFx00"
>>> bytes(x, 'latin-1')
b'x00x00xffx00xffx00'