В общем, вы должны стараться, чтобы байт-ориентированные операции выполнялись для строк байтов (bytes
), а текстовые (или хотя бы ориентированные на USV) операции выполнялись для строк (str
). Поэтому вместо того, чтобы пытаться создать ваше сообщение в виде строки для единственного окончательного кодирования:
message_identifier = chr(50)
message_name = 'Hello '
message_data_size = '160'.encode().decode() # clueless here
frame = (message_identifier + message_name + (message_data_size)) # don't know what to do with message_data_size
byt = frame.encode()
кодировать, когда логика передает границу от текста к байту:
message_identifier = bytes([50]) # or b'\x32', or b'2'
message_name = 'Hello '
message_data_size = bytes([160])
frame = message_identifier + message_name.encode('utf-8') + message_data_size