首页 > 编程语言 >C++ 字符串编码转换封装函数,UTF-8编码与本地编码互转

C++ 字符串编码转换封装函数,UTF-8编码与本地编码互转

时间:2023-11-28 10:04:50浏览次数:28  
标签:编码 UTF string strSrc szRes str 互转 NULL


简介

字符串编码转换封装函数,UTF-8编码与本地编码互转。

中文乱码的解决方法

有时候我们会遇到乱码的字符串,比如:

  1. 古文码

    可能是用GBK方式读取UTF-8编码的中文导致的,用下面的Utf8ToLocal(string str)函数转换一下就可以了。
  2. 口字码

    可能是因为以UTF-8的方式读取GBK编码的中文导致的,用下面的LocalToUtf8(string str)函数转换一下能搞定。

代码

//将UTF-8编码的字符串转换为本地编码
string Utf8ToLocal(string str)
{
	std::string result;
	WCHAR* strSrc;
	LPSTR szRes;

	//获得临时变量的大小
	int i = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);
	strSrc = new WCHAR[i + 1];
	MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, strSrc, i);

	//获得临时变量的大小
	i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
	szRes = new CHAR[i + 1];
	WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);

	result = szRes;
	delete[]strSrc;
	delete[]szRes;

	return result;
}
//将本地编码转换为UTF-8编码的字符串
string LocalToUtf8(string str)
{
	std::string result;
	WCHAR* strSrc;
	CHAR* szRes;
	int i;

	// 获得临时变量的大小  
	i = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
	strSrc = new WCHAR[i + 1];
	MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, strSrc, i);

	// 获得临时变量的大小  
	i = WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, NULL, 0, NULL, NULL);
	szRes = new CHAR[i + 1];
	WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, szRes, i, NULL, NULL);

	result = szRes;
	delete[] strSrc;
	delete[] szRes;

	return result;
}


标签:编码,UTF,string,strSrc,szRes,str,互转,NULL
From: https://blog.51cto.com/wangpaifeixingy/8595248

相关文章

  • 字符串的解码和编码
    #str表示字符串类型转为bytes类型(二进制类型)s='伟大的中国梦'scode=s.encode(errors='replace')#默认是utf-8,因为utf-8每个中文占3个字节print(scode)#所以输出18位字节#输出结果为:\xe4\xbc\x9f\xe5\xa4\xa7\xe7\x9a\x84\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa2\xa6#用_gbk方式s......
  • 求解--如何把图片的base64编码转换成图片(未解决)
    问题描述将图片弄好之后,并且显示我弄成功了,但是就是找不到图片保存到哪里了;然后发现可以将base64编码转换成图片,但是不会转~~~求解救呀~~~问题解决未解决!!!......
  • lucene posting list 编码之Frame of Reference
    本文是:https://www.elastic.co/cn/blog/frame-of-reference-and-roaring-bitmaps文章的翻译及理解。lucene在存储doc时,会为每个doc分配一个doc_id。doc_id是segment维度(index->shard->segment)的一个数值,这个数值的范围是[0,2^32-1],因此:一个segment最多允许存储2^32-......
  • 【Python】base64模块对图片进行base64编码和解码
    图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址。这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要消耗一个http请求下载而来的。没错,不管如何,图片的下载始终都要向服务器发出请求,要是图片的下载不用向服务器发出请求,而可......
  • 【Python】使用vscode编码提示找不到模块
    问题描述已经使用pip安装了模块,但是使用vscode没有代码提示。解决办法这种情况一般是因为pc安装了多个python版本,安装模块的pip不是vscode指定的编译环境。点击右下角,选择环境变量中配置的python版本。解决问题:......
  • Clion的中文编码问题
    此文章用于解决Clion编译源代码后运行显示乱码问题!首先打开设:全部改为UTF-8再将文件的编码改为GBK:最后运行:......
  • Cesium 中坐标相互转换
    Cesium中坐标相互转换经纬度degree<->弧度radianradians->degrees[static]Cesium.Math.toDegrees(radians)→numberconstcoordWGS84Lon=Cesium.Math.toDegrees(coordCartographic.longitude);constcoordWGS84Lat=Cesium.Math.toDegrees(coordCartographic.......
  • 空间三维模型的编码结构光方法实现:基于EinScan-S软件
      本文介绍基于EinScan-S软件,实现编码结构光方法的空间三维模型重建的具体操作。目录1相关原理1.1编码结构光成像原理1.2编码结构光编码方式1.3编码结构光与侧影轮廓方法比较1.4编码结构光方法流程2三维模型制作2.1防晒霜罐三维模型制作2.1.1前期准备工作2.1.2软件配......
  • uniapp base64与file互转
    uniappbase64与file互转//base64转flie//base64转fliebase64ToFile(base64data,cb){ constfsm=uni.getFileSystemManager(); constFILE_BASE_NAME='tmp_base64src';//自定义文件名 const[,format,bodyData]=/data:image\/(\w+);base64,(.*)/.exec......
  • sqlserver 中将存入值编码‘1,2,3’查询返回编码对应名称‘张三,李四,王五’
    select(selectMouldNamefrommould_MouldwhereMouldCode=a.MouldCode)MouldName,(selectSpecsfrommould_MouldwhereMouldCode=a.MouldCode)MouldSpecs,STUFF((SELECT','+f.ProcessNameFROMmes_ProcessfWHERECH......