Skip to content

Commit 5681d11

Browse files
authored
Merge pull request #1 from nbraem/master
fix for unicode filenames
2 parents 08bdc16 + fc5cbbd commit 5681d11

2 files changed

Lines changed: 19 additions & 4 deletions

File tree

openctm/io.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def __eq__(self, other):
1919
def import_mesh(_filename):
2020
ctm_context = ctmNewContext(CTM_IMPORT)
2121
try:
22-
ctmLoad(ctm_context, str(_filename).encode('utf-8'))
22+
ctmLoad(ctm_context, _encode(_filename))
2323
err = ctmGetError(ctm_context)
2424
if err != CTM_NONE:
2525
raise IOError("Error loading file: %s" % str(ctmErrorString(err)))
@@ -55,7 +55,7 @@ def import_mesh(_filename):
5555
def export_mesh(_ctm, _filename):
5656
ctm_context = ctmNewContext(CTM_EXPORT)
5757

58-
if not _filename.lower().endswith('.ctm'):
58+
if not str(_filename).lower().endswith('.ctm'):
5959
_filename += '.ctm'
6060

6161
try:
@@ -81,6 +81,21 @@ def export_mesh(_ctm, _filename):
8181
p_normals = None
8282

8383
ctmDefineMesh(ctm_context, p_vertices, CTMuint(vertex_count), p_faces, CTMuint(face_count), p_normals)
84-
ctmSave(ctm_context, ctypes.c_char_p(_filename.encode('utf-8')))
84+
ctmSave(ctm_context, ctypes.c_char_p(_encode(_filename)))
8585
finally:
8686
ctmFreeContext(ctm_context)
87+
88+
def _encode(_filename):
89+
try:
90+
return str(_filename).encode("utf-8")
91+
except UnicodeEncodeError:
92+
pass
93+
94+
try:
95+
# works fine for pathlib.Path
96+
return bytes(_filename)
97+
except TypeError:
98+
pass
99+
100+
return str(_filename).encode("utf-8", "surrogateescape")
101+

openctm/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.0.9'
1+
__version__ = '1.0.10'

0 commit comments

Comments
 (0)