解决自定义模块中英文均会乱码的问题
自定义模块包含了2个运行参数,一个是string类型的“模型文件”,另一个是枚举类型的“处理器”。对于string类型的参数“模型文件”,VM官方提供的“自定义模块生成工具”不能配置“文件选择”控件,所以本人是参考VM官方的模块修改模块xml配置显示的文件选择器。但是这个文件选择器存在一个问题,就是首次打开模块设置选择路径参数时字符正常显示,不管中英文都不会乱码,再次打开参数设置就看到乱码了。


解决办法:


1.打开cmd,输入chcp发现字符编码是936,是GBK编码




2.而VM是采用UTF-8编码,也就是说,字符编码不匹配,需要转换编码,下面提供了两个UTF-8和GBK编码互转的函数:

std::string GBKToUTF8(const char* gbkStr) {
	int gbkLen = strlen(gbkStr);
	int utf8Len = gbkLen * 3; // UTF-8最多需要3个字节来表示一个字符  
	wchar_t* wstr = new wchar_t[utf8Len + 1];
	memset(wstr, 0, sizeof(wchar_t) * (utf8Len + 1));

	// 将GBK编码的字符串转换为宽字符(通常是UTF-16)  
	MultiByteToWideChar(CP_ACP, 0, gbkStr, -1, wstr, utf8Len);

	char* utf8Str = new char[utf8Len + 1];
	memset(utf8Str, 0, utf8Len + 1);

	// 将宽字符转换为UTF-8编码的字符串  
	WideCharToMultiByte(CP_UTF8, 0, wstr, -1, utf8Str, utf8Len, NULL, NULL);

	delete[] wstr;
	std::string utf8String(utf8Str);
	delete[] utf8Str;

	return utf8String;
}
std::string UTF8ToGBK(const std::string& utf8Str) {
	int utf8Len = utf8Str.length();
	int gbkLen = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), utf8Len, NULL, 0);
	wchar_t* wstr = new wchar_t[gbkLen];
	MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), utf8Len, wstr, gbkLen);

	int gbkOutputSize = WideCharToMultiByte(CP_ACP, 0, wstr, gbkLen, NULL, 0, NULL, NULL);
	char* gbkStr = new char[gbkOutputSize];
	WideCharToMultiByte(CP_ACP, 0, wstr, gbkLen, gbkStr, gbkOutputSize, NULL, NULL);

	delete[] wstr;
	std::string result(gbkStr);
	delete[] gbkStr;

	return result;
}


3.使用方法:可以拷贝到代码文件AlgorithmModule.cpp中在“获取算法参数”和“设置算法参数”函数中使用:




4.编译完成即可正常显示。最后贴上配置自定义模块运行参数中配置文件选择器的xml配置:



要修改的文件:

<OpenFileDialog Name="ModelFile">
    <Description>模型文件</Description>
    <DisplayName>模型文件</DisplayName>
    <AccessMode>RW</AccessMode>
    <CustomVisible>True</CustomVisible>
    <CurValue></CurValue>
    <DefaultValue></DefaultValue>
    <FileOption>
        <IsMultiselect>false</IsMultiselect>
        <FilterName>%.tree|*.tree%</FilterName>
    </FileOption>
</OpenFileDialog><br/>
版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

VM算法圆查找工具与基于opencv开发的圆查找对比

下一篇

基于C++OpenCV实现VisionMaster中的“直线边缘缺陷检测”

评论请先登录 登录
全部评论 0
Lv.0
0
关注
0
粉丝
1
创作
0
获赞
相关阅读
  • 【保姆级教程】算法模块封装详解
    2024-10-17 浏览 0
  • 【保姆级教程】算法模块封装详解
    2024-10-17 浏览 0
  • 第三届“悉灵杯”基于MV-DT01SDU相机识别果蔬等数据集
    2024-10-14 浏览 0
  • 第三届“悉灵杯”基于MV-DT01SDU相机识别果蔬等数据集
    2024-10-14 浏览 0
  • 【3D系列】2D-2D对极几何估计相机运动3D位姿
    2024-10-14 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器