Python 3 - преобразование байтовой строки в строку с тем же содержимым - PullRequest
0 голосов
/ 14 декабря 2018

Я работаю над переносом кода проекта из Python 2 в Python 3. Один фрагмент кода использует struct.pack, который предоставляет мне значение в строке (Python2) и байтовой строке (Python3). Я хотел преобразовать байтовую строку в python3 внормальная строка.Преобразованная строка должна иметь одинаковое содержимое, чтобы она соответствовала существующим значениям.Например,

in_val = b'\0x01\0x36\0xff\0x27' # Input value
out_val = '\0x01\0x36\0xff\0x27' # Output should be this

У меня есть одно решение для преобразования in_val в строку, а затем явное удаление символов 'b' и '\', которые появятся после его преобразования в строку.

Есть ли какие-либо другиеРешение конвертировать, используя чистый способ.Любая помощь приветствуется

1 Ответ

0 голосов
/ 14 декабря 2018

str значения всегда кодовые точки Unicode .Первые 256 значений - это диапазон Latin-1 , так что вы можете использовать этот кодек для декодирования байтов непосредственно в эти кодовые точки:

out_val = in_val.decode('latin1')

Однако вы хотите пересмотреть, почему выделаем это.Не храните двоичные данные в строках, почти всегда есть лучшие способы работы с двоичными данными.Например, если вы хотите хранить двоичные данные в JSON, вам нужно использовать Base64 или другую схему кодирования двоичного текста, которая лучше обрабатывает крайние случаи, такие как двоичные данные, содержащие escape-коды, когда интерпретируется как текст.

...