From 11fdb836275d5d9cc7a40c4b7ecc4486c16c73c6 Mon Sep 17 00:00:00 2001 From: Pyogenics Date: Mon, 9 Dec 2024 13:53:29 +0000 Subject: [PATCH] Ignore invalid strings, some models use them for some reason --- io_scene_a3d/A3DObjects.py | 1 + io_scene_a3d/IOTools.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/io_scene_a3d/A3DObjects.py b/io_scene_a3d/A3DObjects.py index dac8ad5..60c9525 100644 --- a/io_scene_a3d/A3DObjects.py +++ b/io_scene_a3d/A3DObjects.py @@ -36,6 +36,7 @@ class A3DMaterial: print(f"[A3DMaterial name: {self.name} color: {self.color} diffuse map: {self.diffuseMap}]") def read3(self, stream): + print(stream.tell()) self.name = readLengthPrefixedString(stream) self.color = unpackStream("<3f", stream) self.diffuseMap = readLengthPrefixedString(stream) diff --git a/io_scene_a3d/IOTools.py b/io_scene_a3d/IOTools.py index fe136ea..e7b6064 100644 --- a/io_scene_a3d/IOTools.py +++ b/io_scene_a3d/IOTools.py @@ -33,7 +33,7 @@ def readNullTerminatedString(stream): while char != b"\x00": string += char char = stream.read(1) - return string.decode("utf8") + return string.decode("utf8", errors="ignore") def calculatePadding(length): # (it basically works with rounding) @@ -47,4 +47,4 @@ def readLengthPrefixedString(stream): paddingSize = calculatePadding(length) stream.read(paddingSize) - return string.decode("utf8") \ No newline at end of file + return string.decode("utf8", errors="ignore") \ No newline at end of file