使用SOFA For Unity SDK导入插件时触发ExecutionEngineException错误求助
SOFA For Unity SDK导入后String conversion error问题解决办法
错误信息:
ExecutionEngineException: String conversion error: Illegal byte sequence encounted in the input. SofaUnityAPI.SofaContextAPI.DisplayMessages () (at Assets/SofaUnity/Plugins/SofaUnityAPI/SofaContextAPI.cs:429) SofaUnity.SofaContext.DoCatchSofaMessages () (at Assets/SofaUnity/Scripts/SofaContext.cs:564) SofaUnity.SofaContext.ReconnectSofaScene () (at Assets/SofaUnity/Scripts/SofaContext.cs:618) SofaUnity.SofaContext.Init () (at Assets/SofaUnity/Scripts/SofaContext.cs:405) SofaUnity.SofaContext.StartSofa () (at Assets/SofaUnity/Scripts/SofaContext.cs:312) SofaUnity.SofaContext.Awake () (at Assets/SofaUnity/Scripts/SofaContext.cs:258)
解决步骤
修复字符串转换编码问题
打开Assets/SofaUnity/Plugins/SofaUnityAPI/SofaContextAPI.cs定位到429行,修改字符串转换逻辑,添加错误处理:// 替换原字符串转换代码为: var encoding = Encoding.UTF8; var decoder = encoding.GetDecoder(); char[] chars = new char[decoder.GetCharCount(byteData, 0, byteData.Length)]; decoder.GetChars(byteData, 0, byteData.Length, chars, 0, true); string message = new string(chars);或者尝试使用系统默认编码兼容非UTF-8字符:
string message = Encoding.Default.GetString(byteData);临时禁用日志捕获
打开Assets/SofaUnity/Scripts/SofaContext.cs找到DoCatchSofaMessages方法,注释掉调用DisplayMessages的代码,先确保插件能启动,后续再排查编码根源。调整SOFA语言设置
将SOFA运行环境的语言切换为英文,避免输出含非UTF-8编码的本地化日志,减少转换冲突。
内容的提问来源于stack exchange,提问作者Kaka_1111
相关产品推荐
相关产品推荐

