From e5af17ebbc8fc950ac60bfb7ca7c5974e1720d49 Mon Sep 17 00:00:00 2001 From: Campbell Barton <ideasman42@gmail.com> Date: Thu, 20 Jan 2011 09:32:59 +0000 Subject: [PATCH] unique name exporting was broken, needed to export bytes. --- io_scene_3ds/export_3ds.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/io_scene_3ds/export_3ds.py b/io_scene_3ds/export_3ds.py index 24013243d..5a4672971 100644 --- a/io_scene_3ds/export_3ds.py +++ b/io_scene_3ds/export_3ds.py @@ -89,23 +89,24 @@ import struct # So 3ds max can open files, limit names to 12 in length # this is verry annoying for filenames! -name_unique = [] -name_mapping = {} +name_unique = [] # stores str, ascii only +name_mapping = {} # stores {orig: byte} mapping def sane_name(name): name_fixed = name_mapping.get(name) if name_fixed is not None: return name_fixed - new_name = name[:12] - + # strip non ascii chars + new_name_clean = new_name = name.encode("ASCII", "replace").decode("ASCII")[:12] i = 0 while new_name in name_unique: - new_name = new_name[:-4] + '.%.3d' % i + new_name = new_name_clean + ".%.3d" % i i+=1 + # note, appending the 'str' version. name_unique.append(new_name) - name_mapping[name] = new_name + name_mapping[name] = new_name = new_name.encode("ASCII", "replace") return new_name def uv_key(uv): @@ -167,7 +168,8 @@ class _3ds_string(object): '''Class representing a zero-terminated string for a 3ds file.''' __slots__ = ('value', ) def __init__(self, val): - self.value=val + assert(type(val) == bytes) + self.value = val def get_size(self): return (len(self.value)+1) -- GitLab