fix [#30623] user-defined render presets bug

this report exposed multiple bugs in blender when using a non utf8 compatible home directory.

- bpy.utils.script_paths() would crash when homedir wasn't utf8 (reported bug)
- PyC_DefaultNameSpace() - would raise an error when running when __file__ was non utf8.
- preset filepath property was not set to accept non utf8.
- bpy.paths.display_name would raise an error on non utf8 paths, (used for preset draw)
This commit is contained in:
2012-03-21 22:29:49 +00:00
parent 95f66f162c
commit b56d2f9766
6 changed files with 39 additions and 27 deletions

View File

@@ -118,6 +118,14 @@ def clean_name(name, replace="_"):
return name
def _clean_utf8(name):
name = _os.path.splitext(basename(name))[0]
if type(name) == bytes:
return name.decode("utf8", "replace")
else:
return name.encode("utf8", "replace").decode("utf8")
def display_name(name):
"""
Creates a display string from name to be used menus and the user interface.
@@ -126,17 +134,18 @@ def display_name(name):
filenames and module names.
"""
name_base = _os.path.splitext(name)[0]
name = _os.path.splitext(name)[0]
# string replacements
name_base = name_base.replace("_colon_", ":")
name = name.replace("_colon_", ":")
name_base = name_base.replace("_", " ")
name = name.replace("_", " ")
if name_base.islower():
return name_base.lower().title()
else:
return name_base
if name.islower():
name = name.lower().title()
name = _clean_utf8(name)
return name
def display_name_from_filepath(name):
@@ -144,11 +153,10 @@ def display_name_from_filepath(name):
Returns the path stripped of directory and extension,
ensured to be utf8 compatible.
"""
name = _os.path.splitext(basename(name))[0]
if type(name) == bytes:
return name.decode("utf8", "replace")
else:
return name.encode("utf8", "replace").decode("utf8")
name = _clean_utf8(name)
return name
def resolve_ncase(path):