UnicodeDecodeError: код «utf-8» c не может декодировать байт 0x95 в позиции 3: недопустимый начальный байт (Python) программирования сокета - PullRequest
0 голосов
/ 02 марта 2020

Я получаю следующую ошибку для моего кода:

 bytes_length = int(len_message.decode())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 3: invalid start byte

client.py

import socket
import threading
import os

def Main():
    host = '127.0.0.1' #IP Address of the system which has the software sending TCP data
    port = 2055 #TCP port number used by the software
    s = socket.socket()
    s.connect((host,port))

    i = 0
    #for i < 2:
    len_message = s.recv(4)
    print(len_message)
    while len_message:
        bytes_length = int(len_message.decode())
        #data_length = (bytes_length + 3)
        print(bytes_length)
        #print(data_length)
        data = s.recv(bytes_length)
        print(data)
        write_file(data)
        len_message = s.recv(4)
    #i+=1
    s.close()

def write_file(data):
        with open("Output.txt", "ab") as text_file:
            text_file.write(data)
            text_file.write('\n'.encode())


if __name__ == '__main__':
    Main()

len_message - это b '\ x00 \ x00 \ x06 \ x95', который я пытаюсь расшифровать. Я не понимаю, почему я получаю эту ошибку. Пожалуйста помоги. заранее спасибо.

1 Ответ

0 голосов
/ 02 марта 2020

len_message.decode() пытается интерпретировать len_message как строку в юникоде, в то время как из вашего контекста может показаться, что 4 байта являются целочисленным представлением.

Вы можете получить длину в байтах следующим образом:

bytes_length = int.from_bytes(len_message, 'big') # assuming big-endian bytes order.

Для байтов, которые вы показываете, bytes_length будет 1685.

...