在使用isaac sim或isaac lab时,如果涉及传感器插件,omni.isaac.sensor,可能会遇到如下编码错误,导致传感器无法正常使用。这个错误在isaac sim历代版本里一直都存在。
2024-10-22 08:42:59 [4,085ms] [Error] [carb.scripting-python.plugin] UnicodeDecodeError: 'gbk' codec can't decode byte 0xa0 in position 1096: illegal multibyte sequenceAt:D:\anaconda3\envs\my_lab\lib\json\__init__.py(293): loadd:/omniverse/pkg/isaac_lab/my_lab/_isaac_sim/exts/omni.isaac.sensor/omni/isaac/sensor/scripts/menu.py(232): __init__d:/omniverse/pkg/isaac_lab/my_lab/_isaac_sim/exts/omni.isaac.sensor/omni/isaac/sensor/scripts/extension.py(37): on_startupD:\OMNIVERSE\pkg\isaac_lab\my_lab\_isaac_sim/kit/kernel/py\omni\ext\_impl\_internal.py(164): _startup_extD:\OMNIVERSE\pkg\isaac_lab\my_lab\_isaac_sim/kit/kernel/py\omni\ext\_impl\_internal.py(224): startupD:\OMNIVERSE\pkg\isaac_lab\my_lab\_isaac_sim/kit/kernel/py\omni\ext\_impl\_internal.py(328): startup_extensionPythonExtension.cpp::startup()(2): <module>D:\OMNIVERSE\pkg\isaac_lab\my_lab\_isaac_sim/exts/omni.isaac.kit\omni\isaac\kit\simulation_app.py(411): _start_appD:\OMNIVERSE\pkg\isaac_lab\my_lab\_isaac_sim/exts/omni.isaac.kit\omni\isaac\kit\simulation_app.py(200): __init__D:\OMNIVERSE\pkg\isaac_lab\my_lab\source\extensions\omni.isaac.lab\omni\isaac\lab\app\app_launcher.py(588): _create_appD:\OMNIVERSE\pkg\isaac_lab\my_lab\source\extensions\omni.isaac.lab\omni\isaac\lab\app\app_launcher.py(113): __init__D:\OMNIVERSE\pkg\isaac_lab\my_lab\source\standalone\workflows\rsl_rl\play.py(36): <module>2024-10-22 08:42:59 [4,086ms] [Error] [omni.ext.plugin] [ext: omni.isaac.sensor-12.9.1] Failed to startup python extension.
这个错误信息表明在使用 Python 读取文件时遇到了编码问题。错误 UnicodeDecodeError: 'gbk' codec can't decode byte 0xa0 in position 1096: illegal multibyte sequence
指出使用 GBK 编码在尝试解码文件的某个字节序列时失败了。这通常发生在尝试用错误的编码方式读取文件时。
在 Python 中,当你打开文件读取时,如果没有指定编码方式,它可能会默认使用系统的编码方式(在某些 Windows 系统上可能是 GBK)。如果文件实际上是以其他编码(如 UTF-8)保存的,就会遇到解码错误。
修复建议是:
打开isaac sim目录,找到该python文件,路径在:
exts\omni.isaac.sensor\omni\isaac\sensor\scripts\menu.py
定位到 json.load 代码,不同版本的 omni.isaac.sensor 这一块写法有所差距
如isaac sim 4.2.0 版本里为:
data = json.load(open(os.path.join(d, file)))
将该行代码改为如下写法即可:
with open(os.path.join(d, file), encoding='utf-8') as f:data = json.load(f)
原理是,使用 Python 的 open
函数时,可以通过 encoding
参数指定编码方式。