tsingsee青犀视频开发ai智能分析采用c++中文编码出现乱码问题是由什么导致的?(代码片段)

TSINGSEE TSINGSEE     2023-02-28     706

关键词:

EasyCVR的AI智能分析版本在做研发的时候,就受到了很多朋友的关注,EasyCVR的人脸识别功能采用了Go语言,使用c/c++ 的头文件和dll文件。在C++ 中如果出现中文,会出现乱码的问题,使用notepad++打开保存的二进制文件,出现乱码。

正常的情况选择UTF8编码正常显示:

在计算机的内部,所有的数据都是以二进制的形式保存的,在存储文本时,需要将文本文件的信息都转换为二进制进行保存,而现实是将二进制转换为文本显示,所以编码就是以二进制和显示字符直接转换。

  • ASCII码:是美国制定的一套字符编码,主要用来显示英文字符。

  • GBK:ASCII编码只适合显示英文字符,但是对中文有6000多个常用汉字,一个字节的大小完全不够用。所以制定GBK标准。用二个字节来表示中文。

  • ASNI:除了中国以外,其他的许多国家页都制定自己的编码标准。

  • Unicode:由于不同的ANSI编码之间互不兼容,这样进行信息交互就会进行编码转换。为了解决这个问题,又制定Unicode编码,用二个字节统一表示所有字符。

  • UTF-8:Unicode可以表示所有的字符,但是英文字符也与其他字符一样,使用两个字节进行编码,使得在保存英文文本的时候会多出一倍的存储空间,而大多数的文本信息都是英文的。所以UTF-8是一种可变长的编码方式。

多字节到宽字节的转换:

setlocale(LC_ALL, "");
	size_t requiredSize = mbstowcs(nullptr, w, 0);
	wszClassName = new WCHAR[requiredSize + 1];
	memset(wszClassName, 0x00, sizeof(wszClassName));
	if (static_cast<size_t>(-1) == mbstowcs(wszClassName, w, requiredSize + 1))
	
		std::cout << "fail" << std::endl;
		return -1;
	
	else
	
		std::wcout << "success: " << wszClassName << std::endl;
	
return 0;

UTF-8编码转GBK,在vs中打印输出:

std::wstring UT2WC(const char* buf)

	int len = MultiByteToWideChar(CP_UTF8, 0, buf, -1, NULL, 0);
	std::vector<wchar_t> unicode(len);
	MultiByteToWideChar(CP_UTF8, 0, buf, -1, &unicode[0], len);

	return std::wstring(&unicode[0]);


std::string ws2s(const std::wstring& ws)

	std::string curLocale = setlocale(LC_ALL, NULL);
	setlocale(LC_ALL, "chs");
	const wchar_t* _Source = ws.c_str();
	size_t _Dsize = 2 * ws.size() + 1;
	char *_Dest = new char[_Dsize];
	memset(_Dest, 0, _Dsize);
	wcstombs(_Dest, _Source, _Dsize);
	std::string result = _Dest;
	delete[]_Dest;
	setlocale(LC_ALL, curLocale.c_str());
	return result;

Unicode、ANSI和UTF之间的转换:

std::string UnicodeToUTF8(const std::wstring & wstr)

	std::string ret;
	try 
		std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
		ret = wcv.to_bytes(wstr);
	
	catch (const std::exception & e) 
		std::cerr << e.what() << std::endl;
	
	return ret;


std::wstring UTF8ToUnicode(const std::string & str)

	std::wstring ret;
	try 
		std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
		ret = wcv.from_bytes(str);
	
	catch (const std::exception & e) 
		std::cerr << e.what() << std::endl;
	
	return ret;


std::string UnicodeToANSI(const std::wstring & wstr)

	std::string ret;
	std::mbstate_t state = ;
	const wchar_t *src = wstr.data();
	size_t len = std::wcsrtombs(nullptr, &src, 0, &state);
	if (static_cast<size_t>(-1) != len) 
		std::unique_ptr< char[] > buff(new char[len + 1]);
		len = std::wcsrtombs(buff.get(), &src, len, &state);
		if (static_cast<size_t>(-1) != len) 
			ret.assign(buff.get(), len);
		
	
	return ret;


std::wstring ANSIToUnicode(const std::string & str)

	std::wstring ret;
	std::mbstate_t state = ;
	const char *src = str.data();
	size_t len = std::mbsrtowcs(nullptr, &src, 0, &state);
	if (static_cast<size_t>(-1) != len) 
		std::unique_ptr< wchar_t[] > buff(new wchar_t[len + 1]);
		len = std::mbsrtowcs(buff.get(), &src, len, &state);
		if (static_cast<size_t>(-1) != len) 
			ret.assign(buff.get(), len);
		
	
	return ret;

tsingsee青犀视频ai智能识别功能开发如何通过gpu实现加速识别?

大家知道我们最近在EasyCVR的AI智能技术方面下了比较大的功夫,近期一直在对智能识别做适配上的测试,待测试完毕即可上线,大家可以关注我们,获取我们最新的研发进度和测试进度。由于AI识别是一个消耗工... 查看详情

tsingsee青犀视频开发ai识别dlib使用gpu如何激活?

...防行业新的生命力,促进安防行业的全面发展。目前TSINGSEE青犀视频团队也紧抓5G+AI技术的发展,为旗下产品升级和研发持续努力。现有的EasyCVR/EasyRTC等都相继加入了AI智能检测分析、5G大宽带实时音视频应用等。我们... 查看详情

tsingsee青犀视频开发安全帽智能检测识别经验分享

...智能检测技术,但是在研发的过程中,我们(TSINGSEE青犀视频研发团队)经历的曲折与困难也 查看详情

tsingsee青犀视频智能分析开发中大华设备搜索和批量重置密码的代码实现(代码片段)

之前我们讲到了TSINGSEE青犀视频团队在开发大华SDK当中的一些流程,本文我们分享下大华设备搜索和批量重置密码的代码实现。主要流程图如下:分布介绍:1、调用CLIENT_Init完成SDK初始化流程。2、调用CLIENT_StartSearchDev... 查看详情

tsingsee青犀视频再度荣获腾讯云+社区2022年度优秀作者!

...f0c;安徽旭帆信息科技有限公司在腾讯云+社区的专栏“TSINGSEE青犀视频”、“EasyNVR”荣获2022年度优秀作者表彰!“TSINGSEE青犀视频”及“EasyNVR”是安徽旭帆信息科技有限公司(以下简称“旭帆科技”)在腾讯云+... 查看详情

tsingsee青犀视频开发python3行人分析功能运行一段时间后崩溃是什么原因?

...我们更新了不少关于行人分析的相关研发过程,对于TSINGSEE青犀视频的各大平台来说,在不久后也逐步将智能分析的功能融合进去,形成新的智能分析平台。在开发行人分析过程中,我们在测试时发现分析系统运... 查看详情

.net对接tsingsee青犀视频智能分析平台api的部分功能及技巧总结(内含post和get的调用)(代码片段)

TSINGSEE青犀视频智能分析平台EasyNVR、EasyCVR等都具备丰富的API接口,API接口中密码需要MD5加密,这一点是为了系统安全考虑,下文中有具体实现,可以参考。本文我们总结下NET对接TSINGSEE青犀视频智能分析平台API用... 查看详情

tsingsee智能分析网关如何添加通道?

智能分析网关是由TSINGSEE青犀视频研发的智能硬件产品,可支持AI视频智能分析功能,支持对视频监控场景中的人脸、人体、安全帽、口罩等进行抓拍、检测与识别,对异常情况进行智能提醒和通知,可广泛应用于... 查看详情

tsingsee青犀视频开发中go语言时间转换分享(代码片段)

在我们开发视频平台智能分析功能的过程中,系统的时间因素也是需要注意的。在很多实际业务中,需要大量处理视频或者分析结果的时间日期时区数据。我们多用golang来进行编译和开发,因此本文分享一下我们使用... 查看详情

tsingsee青犀视频开发ai识别对接大华ai设备以通道或者库为对象布控的流程介绍(代码片段)

目前TSINGSEE青犀视频正在对不同AI设备的功能进行对接测试,本文分享一下大华AI设备以通道或者库为对象布控的流程。定义说明:以通道为对象进行布控,即一个通道可布控一个或者多个人脸库。以库为对象进行布控... 查看详情

tsingsee智能分析网关简介及说明

智能分析网关是由TSINGSEE青犀视频研发的智能硬件产品,可支持AI视频智能分析功能,通过对视频监控场景中的人脸、人体、安全帽、口罩等进行抓拍、检测与识别,对异常情况进行智能提醒和通知,可广泛应用于... 查看详情

ai人脸识别/车辆识别智能分析网关微信端告警消息推送的开发流程

智能分析网关是TSINGSEE青犀视频研发的AI边缘计算智能硬件设备,它具有AI智能检测与识别的能力,可对视频及图像中的人、车、物体、行为等进行检测识别与定位、追踪、统计,具体可包括人脸检测与识别、车辆检测... 查看详情

tsingsee青犀视频平台部署如何给软件包文件赋予对应的用户权限?(代码片段)

TSINGSEE青犀视频平台EasyGBS、EasyNVR、EasyDSS等都是可以解压直用的,如果是Linux系统,那么对文件的权限是有需求的,平台这边的软件包解压后出现的文件权限是管理员。那么如何使对应的软件获取到对应用户的权限呢&#... 查看详情

tsingsee青犀视频景区行人检测功能如何实现休息日的分析

前期我们开发的行人检测分析功能已经在景区上线了,如果大家对我们之前的开发比较感兴趣,可以关注我们的博客,搜寻我们相关的博文进行了解。根据景区的特性,我们需要对该系统做进一步的开发,也... 查看详情

tsingsee青犀视频开发大华sdk以图搜图功能简介(代码片段)

大家知道我们最近一直在开发EasyCVR的智能识别功能,为了能够将不同的格式及SDK都与我们EasyCVR进行适配,我们也开始对此进行了研究。本文主要是分享一下我们在开发智能识别功能时,涉及到大华SDK以图搜图功能的... 查看详情

tsingsee青犀视频播放视频流的编码格式和封装格式有什么关系?

TSINGSEE青犀视频经过在视频平台项目开发过程中的多年积累和沉淀,已经有了EasyNVR、EasyGBS、EasyDSS、EasyCVR等优秀的视频流媒体软件平台,此外还具有EasyNVR、EasyCVR的视频边缘智能网关设备。不管是软件平台还是网关设备&#x... 查看详情

tsingsee青犀视频easy系列视频平台如何快捷判断视频流编码格式?

EasyCVR可支持设备通过国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、Ehome等协议接入,对外可分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可支持海量视频汇聚管理,可提供视频监控直播、云端录像、云存储、录像检... 查看详情

浅析tsingsee智能视频分析网关的ai识别技术及应用场景

一、行业背景1)AI技术在安防领域大量落地应用随着近几年人工智能的快速发展,深度学习方法及性能日益提升,计算机视觉、图像处理、视频结构化和大数据分析等技术也不断完善,使得安防产品逐步走向智能... 查看详情