Я использую кодировать правильно / неправильно в Python 3 для преобразования строки в байты? - PullRequest
0 голосов
/ 29 января 2019

Я немного запутался в функциях кодирования и байтов, когда я выполняю преобразование из строки в байты, я получаю дополнительные байты.

Откуда поступают дополнительные байты (в преобразовании)?

Я попробовал функцию байтов и функцию кодирования, как описано здесь:

https://www.programiz.com/python-programming/methods/built-in/bytes

fake_serial_data = chr(176)+chr(0)+chr(0)+chr(0)+chr(73)+chr(0)+chr(0)+chr(0)+chr(0)+chr(255)

print("Number of bytes in original data:", len(fake_serial_data))

encoded_fake_serial_data = fake_serial_data.encode()

print(encoded_fake_serial_data)

print("Number of bytes in encoded data:", len(encoded_fake_serial_data))

1 Ответ

0 голосов
/ 29 января 2019

PySerial уже работает в байтах.Вам не нужно выполнять какие-либо преобразования строки-> байты, потому что PySerial не даст вам строку.Просто сохраните байтовые объекты, которые вам дает PySerial.


В вашем fake_serial_data тесте len(fake_serial_data) - это не количество байтов.fake_serial_data - это не последовательность байтов, и спрашивать, сколько в нем байтов, все равно, что спрашивать, сколько пикселей в вашем доме или сколько карандаша в этих словах, которые вы читаете.

len(fake_serial_data) - это число кодовых точек Unicode в fake_serial_data, а len(encoded_fake_serial_data) - это количество байтов в кодировке UTF-8 fake_serial_data.Нет оснований ожидать однозначного соответствия между кодовыми точками Unicode и результирующими байтами.В UTF-8 кодовые точки выше 127 не отображаются на один байт.


Если вам нужна кодировка, которая отображает кодовые точки Unicode в диапазоне 0-255 на отдельные байты (и происходит сбой наКод Unicode указывает за пределы этого диапазона), есть latin1, но, если вы хотите что-то подобное, это обычно означает, что вы делаете ошибку.

...