ERROR IN LOGGER API:
C++ Exception: std::runtime_error, from <LeviLamina>:
invalid utf8
migrating legacy plugin at plugins/聊天拦截插件.js
16:17:09.417 ERROR [LeviLamina] C++ Exception: nlohmann::json_abi_v3_11_2::detail::type_error, from <legacy-script-engine-quickjs>:
16:17:09.417 ERROR [LeviLamina] [json.exception.type_error.316] invalid UTF-8 byte at index 0: 0xC1
本PR修复issues#24
下面是解释说明:
插件含中文路径名问题
而在本项目的加载逻辑中: (/src/lse/PluginManager.cpp:73)
把它替换成
然后报错编码错误,问题来自: (/src/legacy/main/PluginManager.cpp:57)
直接使用了string去构造path,替换为
问题就解决了
插件名称为中文时的问题
如果插件名称为中文,需要migratePlugin时
会出现两个错误,第一个是log api遇到了非u8字符 第二个是生成json时遇到了非u8字符 定位问题在: (/src/lse/PluginMigration.cpp:34)
(/src/lse/PluginMigration.cpp:59)
替换为:
除此之外这个文件下的抛出异常代码也没有正确处理编码,这里省略不诉 然后在加载插件前还有编码异常的代码: (/src/lse/PluginManager.cpp:70)
manifest里面的成员都是装着utf8的string,path无法把string正确识别为utf8进行构造,需要改成wstr:
其它的编码问题
因为ll的架构设计,所有使用stlpath.string()的地方都是有BUG的,应该换成:ll::string_utils::u8str2str(stlpath.u8string()) 此外,所有重载为path的/运算符都应该检查右边是否为纯英语,否则必须转为wstr,不过目前没在其它地方发现有这个的问题
stlpath.string()导致的问题清单
具体的修复过程就不在赘述了,请直接看文件变动
验证BUG是否修复
本地编译测试
在插件目录下创建一个中文名的插件和一个英文名的插件,同时BDS放置在英文目录下测试
migrating正常:
关闭后重启,加载正常:
然后更换到中文路径下重新实验:
migrating正常:
关闭后重启,加载正常:
Github Action编译测试
在插件目录下创建一个中文名的插件和一个英文名的插件,同时BDS放置在英文目录下测试
migrating正常:
关闭后重启,加载正常:
然后更换到中文路径下重新实验:
migrating正常:
关闭后重启,加载正常:
所有测试均通过
备注:因为xmake依赖的库被修改了,所以说我同步了develop分支的xmake.lua,否则无法完成Github Action编译测试