@@ -19,7 +19,7 @@ def __eq__(self, other):
1919def 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):
5555def 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+
0 commit comments