Blender 3.6导入.x3d文件时UnicodeEncodeError错误修复咨询
解决Blender 3.6导入.x3d文件时的Unicode编码错误
报错信息
导入.x3d文件时触发编码错误,具体堆栈如下:
Python: Traceback (most recent call last): File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\scripts\addons\io_scene_x3d\__init__.py", line 60, in execute return import_x3d.load(context, **keywords) File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\scripts\addons\io_scene_x3d\import_x3d.py", line 3629, in load load_web3d(context, filepath, File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\scripts\addons\io_scene_x3d\import_x3d.py", line 3498, in load_web3d root_node, msg = x3d_parse(filepath) File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\scripts\addons\io_scene_x3d\import_x3d.py", line 1436, in x3d_parse doc = xml.dom.minidom.parseString(data, parser) File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\python\lib\xml\dom\minidom.py", line 2003, in parseString return _do_pulldom_parse(pulldom.parseString, (string,), File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\python\lib\xml\dom\minidom.py", line 1981, in _do_pulldom_parse toktype, rootNode = events.getEvent() File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\python\lib\xml\dom\pulldom.py", line 266, in getEvent self.parser.feed(buf) File "C:\Program Files\Blender Foundation\Blender 3.6\3.6\python\lib\xml\sax\expatreader.py", line 217, in feed self._parser.Parse(data, isFinal) UnicodeEncodeError: 'utf-8' codec can't encode character '\udcae' in position 1: surrogates not allowed
修复方案
方案1:手动清理文件中的无效字符
- 用文本编辑器(如VS Code、Notepad++)打开目标.x3d文件
- 开启显示不可见字符功能(VS Code按
Ctrl+Shift+P搜索"Toggle Render Whitespace";Notepad++在「视图」菜单勾选「显示所有字符」) - 定位到文件第1位的
\udcae无效代理字符,删除或替换为合法UTF-8字符 - 保存文件后重新导入Blender
方案2:修改Blender的X3D导入插件
找到Blender安装目录下的C:\Program Files\Blender Foundation\Blender 3.6\3.6\scripts\addons\io_scene_x3d\import_x3d.py文件,定位到x3d_parse函数(约1430行),修改文件读取逻辑以过滤无效字符:
# 原读取代码 with open(filepath, 'r', encoding='utf-8') as f: data = f.read() # 修改为以下二选一 # 方案A:替换无效字符 with open(filepath, 'r', encoding='utf-8', errors='replace') as f: data = f.read() # 方案B:直接忽略无效字符 with open(filepath, 'r', encoding='utf-8', errors='ignore') as f: data = f.read()
修改后保存文件,重启Blender再尝试导入
方案3:转换文件编码
- VS Code操作:打开.x3d文件,点击右下角编码标识(如「UTF-8」),选择「通过编码保存」,重新选择UTF-8后保存
- 命令行操作(需安装iconv工具):
iconv -f utf-8 -t utf-8 -c 原文件.x3d > 修复后文件.x3d
-c参数会自动忽略无法编码的字符,使用生成的修复后文件导入Blender
内容的提问来源于stack exchange,提问作者Leaz Vil
相关产品推荐
相关产品推荐

