windows unicode、ansi、utf8转换

wstring ANSI_To_UNICODE(const char* pstr)
{
	if (!pstr){
        return L"";
	}
	DWORD dwLen = strlen(pstr) + 1;
	char* pStr = NULL;
	while (!pStr){
		try{
			pStr = new char[dwLen];
		}
		catch (const bad_alloc& e){}
	}
	memset(pStr, 0, dwLen);
	sprintf(pStr, "%s", pstr);


	int nLen = MultiByteToWideChar(CP_ACP, 0, pStr, -1, NULL, 0) + 2;
	WCHAR *pWstr = NULL;
	while (!pWstr){
		try{
			pWstr = new WCHAR[nLen];
		}
		catch (const bad_alloc& e){}
	}
	memset(pWstr, 0, nLen);

	MultiByteToWideChar(CP_ACP, 0, pStr, dwLen, pWstr, nLen);
	wstring wstrData = pWstr;
	delete[] pStr;
	delete[] pWstr;
	return wstrData;
}
string UNICODE_TO_ANSI(const wchar_t *pstr)
{
	if (!pstr){
		return "";
	}
	DWORD dwLen = wcslen(pstr) + 1;
	wchar_t *pwData = NULL;
	while (!pwData){
		try{
			pwData = new wchar_t[dwLen];
		}
		catch (const bad_alloc& e){}
	}
	memset(pwData, 0, dwLen);
	wsprintf(pwData, L"%s", pstr);

	int nLen = WideCharToMultiByte(CP_ACP, 0, pwData, -1, NULL, 0, NULL, NULL) + 1;
	char *pData = NULL;
	while (!pData){
		try{
			pData = new char[nLen];
		}
		catch (const bad_alloc& e){}
	}
	memset(pData, 0, nLen);

	WideCharToMultiByte(CP_ACP, 0, pwData, dwLen, pData, nLen, NULL, NULL);
	string strData(pData);
	delete[] pwData;
	delete[] pData;
	return strData;
}
string UNICODE_TO_UTF8(const wchar_t *pstr)
{
	if (!pstr){
		return "";
	}
	DWORD dwLen = wcslen(pstr) + 1;
	wchar_t *pwData = NULL;
	while (!pwData){
		try{
			pwData = new wchar_t[dwLen];
		}
		catch (const bad_alloc& e){}
	}
	memset(pwData, 0, dwLen);
	wsprintf(pwData, L"%s", pstr);

	int nLen = WideCharToMultiByte(CP_UTF8, 0, pwData, -1, NULL, 0, NULL, NULL) + 1;
	char *pData = NULL;
	while (!pData){
		try{
			pData = new char[nLen];
		}
		catch (const bad_alloc& e){}
	}
	memset(pData, 0, nLen);

	WideCharToMultiByte(CP_UTF8, 0, pwData, dwLen, pData, nLen, NULL, NULL);
	string strData(pData);
	delete[] pwData;
	delete[] pData;
	return strData;
}
string ANSI_TO_UTF8(const string& strData)
{
	char cData[1024] = { 0 };
	wchar_t wcData[1024] = { 0 };
	strcpy(cData, strData.c_str());
	MultiByteToWideChar(CP_ACP, 0, cData, 1024, wcData, 1024);
	memset(cData, 0, 1024);
	WideCharToMultiByte(CP_UTF8, 0, wcData, 1024, cData, 1024, NULL, NULL);
	string str = cData;
	return str;
}
string UTF8_TO_ANSI(const string& strData)
{
    char cData[1024] = { 0 };
    wchar_t wcData[1024] = { 0 };
    strcpy(cData, strData.c_str());
    MultiByteToWideChar(CP_UTF8, 0, cData, 1024, wcData, 1024);
    memset(cData, 0, 1024);
    WideCharToMultiByte(CP_ACP, 0, wcData, 1024, cData, 1024, NULL, NULL);
    string str = cData;
    return str;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值