From 339a31ee05dad66bff4425222a55bb50bb2c7bc8 Mon Sep 17 00:00:00 2001 From: hello-bharadwaj Date: Thu, 5 Feb 2026 15:08:28 -0800 Subject: [PATCH] Fix: Handle UnicodeDecodeError and suppress exceptions for Motive 3 compatibility --- natnet/nat_net_client.py | 5 ++++- natnet/packet_buffer.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/natnet/nat_net_client.py b/natnet/nat_net_client.py index 0f6bf56..61fabe3 100644 --- a/natnet/nat_net_client.py +++ b/natnet/nat_net_client.py @@ -141,7 +141,10 @@ def __process_socket( try: data, addr = in_socket.recvfrom(recv_buffer_size) if len(data) > 0: - self.__process_message(PacketBuffer(data)) + try: + self.__process_message(PacketBuffer(data)) + except Exception as e: + print(f"Warning: Failed to process packet: {e}") return True except (BlockingIOError, socket.timeout): pass diff --git a/natnet/packet_buffer.py b/natnet/packet_buffer.py index a270cd5..61b5e46 100644 --- a/natnet/packet_buffer.py +++ b/natnet/packet_buffer.py @@ -21,7 +21,7 @@ def read_string( else: data_slice = self.__data[self.pointer : self.pointer + max_length] str_enc, separator, remainder = bytes(data_slice).partition(b"\0") - str_dec = str_enc.decode("utf-8") + str_dec = str_enc.decode("utf-8", errors="replace") if static_length: assert max_length is not None self.pointer += max_length