Проблема с кодированием строки в шестнадцатеричном формате .с помощью модуля encode (), но сбой

#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'