您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

字符集转换(UTF-8、ANSI)

时间:09-15来源:作者:点击数:
CDSY,CDSY.XYZ

字符集转换(UTF-8、ANSI)

我是因为数据库使用时,有中文所以导致需要转字符集

UTF-8字符集转ANSI字符集

CString MachinePara::Utf82Ansi(CString& srcCode)
{	
	int srcCodeLen=0;
	//计算接收到待转换字符串的缓冲区所需宽字符数
	srcCodeLen=MultiByteToWideChar(CP_UTF8,NULL,srcCode,srcCode.GetLength(),NULL,0);
	wchar_t* result_t=new wchar_t[srcCodeLen+1];
	//向result_t缓冲区写入宽字符
	MultiByteToWideChar(CP_UTF8,NULL,srcCode,srcCode.GetLength(),result_t,srcCodeLen);
	result_t[srcCodeLen]='\0';
	//计算接收到待转换字符串的缓冲区所需字节数
	srcCodeLen=WideCharToMultiByte(CP_ACP,NULL,result_t,wcslen(result_t),NULL,0,NULL,NULL);
	char* result=new char[srcCodeLen+1];
	//向result缓冲区写入字符
	WideCharToMultiByte(CP_ACP,NULL,result_t,wcslen(result_t),result,srcCodeLen,NULL,NULL);
	result[srcCodeLen]='\0';
	CString srcAnsiCode;
	srcAnsiCode=result;
	delete []result_t;
	delete []result;
	return srcAnsiCode;
}

ANSI字符集转UTF-8字符集

CString MachinePara::ANSItoUTF8(CString& strAnsi)
{
	//获取转换为宽字节后需要的缓存区大小,创建宽字节缓存区,936为简体中文GB2312代码页
	UINT nLen = MultiByteToWideChar(936, NULL, strAnsi, -1, NULL, NULL);
	WCHAR* wszBuffer = new WCHAR[nLen + 1];
	nLen = MultiByteToWideChar(936, NULL, strAnsi, -1, wszBuffer, nLen);
	wszBuffer[nLen] = 0;
	//获取转为UTF8多字节后需要的缓存区大小  创建多字节缓存区
	nLen = WideCharToMultiByte(CP_UTF8, NULL, wszBuffer, -1, NULL, NULL, NULL, NULL);
	CHAR* szBuffer = new CHAR[nLen + 1];
	nLen = WideCharToMultiByte(CP_UTF8, NULL, wszBuffer, -1, szBuffer, nLen, NULL, NULL);
	szBuffer[nLen] = 0;
	
	strAnsi = szBuffer;
	//内存清理
	delete[]wszBuffer;
	delete[]szBuffer;
	return strAnsi;
}
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐