ANSI与UTF8转换

std::string ANSI2UTF8(const std::string& strGBK)
{
	wchar_t* str1;
	int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, nullptr, 0);
	str1 = new wchar_t[n];
	MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
	n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, nullptr, 0, nullptr, nullptr);
	char * str2 = new char[n];
	WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, nullptr, nullptr);
	std::string strUTF8(str2);
	delete[]str1;
	delete[]str2;

	return strUTF8;
}


std::string UTF82ANSI(const std::string& strUTF8)
{
	int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, nullptr, 0);
	unsigned short * str1 = new unsigned short[len + 1];
	memset(str1, 0, len * 2 + 2);
	MultiByteToWideChar(CP_UTF8, 0, (const char*)strUTF8.c_str(), -1, (LPWSTR)str1, len);
	len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)str1, -1, nullptr, 0, nullptr, nullptr);
	char *str2 = new char[len + 1];
	memset(str2, 0, len + 1);
	WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)str1, -1, str2, len, nullptr, nullptr);
	std::string strGBK(str2);
	delete[]str1;
	delete[]str2;

	return strGBK;
}
lstring string_format( const char *fmt,... )
{	
	std::string strResult=""; 
	if (NULL != fmt) 
	{ 
		va_list marker = NULL; 
		va_start(marker, fmt); 

		size_t nLength = _vscprintf(fmt, marker) + 1; 
		std::vector<char> vBuffer(nLength, '\0'); 

		int nRet = _vsnprintf_s(&vBuffer[0], vBuffer.size(), nLength, fmt, marker); 
		if (nRet > 0) 
		{
			strResult = &vBuffer[0];  

		} 

		va_end(marker); 
	} 
	return strResult; 
}
lstring CStringToString(CString& cstr)
{
	lstring str=cstr.GetBuffer(0);
	cstr.ReleaseBuffer();
	return str;
}

猜你喜欢

转载自blog.csdn.net/gao271003105/article/details/80935464
今日推荐