Python3 расшифровывает двоичную строку с шестнадцатеричными числами, превышающими \ x7f - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь перенести некоторый код bmv2 на python2 на python3, и у меня возникает следующая проблема:

python2:

import struct
def demo(byte_list):
   f = 'B' * len(byte_list)
   r = struct.pack(f, *byte_list)
   return r
demo([255, 255])
"\xff\xff"

, портированный на python3, возвращает двоичную строку b "\ xff \ xff " потому что изменился модуль struct. Если я пытаюсь декодировать с помощью r.decode () , возникает исключение, потому что \ xff зарезервировано в таблице Unicode.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

Самое простое решение будетсоединить строку самостоятельно. Я попытался с самодельной строкой, такой как "\ x01" , и она работает, если я попробую "\ xff" , она не работает с экономией. Я думаю, потому что "\ xff" - это "ÿ" в юникоде, а сервер экономии ожидает "\ xff" . Я пробовал разные кодировки и необработанные строки.

TL; DR: есть ли способ декодировать двоичную строку, содержащую \ xff или вообще более высокую, чем \ x7f (которая является ord 127) в python3? b "\ xff" => "x \ ff" ИЛИ использовать старый импорт структуры python2?

...