Blender插件枚举属性含变音字符文件名显示异常问题求助
根因分析
Windows系统默认使用ANSI编码处理文件路径,pathlib读取文件名时会默认采用系统编码返回字符串,而Blender UI全局使用UTF-8编码渲染文本,两种编码不匹配就会出现变音字符乱码。控制台输出时会自动适配系统编码,所以不会出现显示异常。你手动创建的字符串默认是UTF-8编码,因此在Blender UI中可以正常显示。
修复方案
修改原有代码,对读取到的文件名做显式编码转换,适配Blender的UTF-8环境,同时优化索引获取逻辑避免错误:
# get files with path p = Path(directory).glob('*.py') files_with_path = [f for f in p if f.is_file()] # 读取文件名时显式转成UTF-8编码 files = [f.stem.encode('cp1252', errors='replace').decode('utf-8', errors='replace') for f in files_with_path] # replace underlines with empty space for UI files_UI = [f.replace('_',' ') for f in files] # create list to return (needed: index number, name, description) EnumItems = [] # 用enumerate直接获取索引,避免index方法的性能问题和重复值错误 for idx, f in enumerate(files_UI): EnumItems.append((str(idx), f, 'Render Presets'))
补充说明
- 如果上述修复仍有乱码,可以把编码转换的源编码
cp1252替换为你Windows系统的当前代码页:中文系统通常为gbk,西欧系统为cp1252 - 如果传入的directory路径本身包含特殊字符,可以先对directory字符串做同样的编码转换再传入Path构造函数
- 原代码中使用
list.index()获取索引的逻辑存在性能问题,且遇到重名文件时会返回错误索引,推荐统一使用enumerate遍历获取索引
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

