VC++ 处理UTF8

vs中直接显示utf8数据,会是乱码,vs中的默认编码格式是gbk,所以可以将utf8转换为gbk

下面是转换:

std::string utf8ToGBK(const std::string &strUtf8)
{
	int len = MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, NULL, 0);
	wchar_t * wszGBK = new wchar_t[len + 1];
	memset(wszGBK, 0, len + 1);
	MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, wszGBK, len);

	len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
	char *szGBK = new char[len + 1];
	memset(szGBK, 0, len + 1);
	WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);

	std::string strGBK(szGBK);

	delete[] szGBK;
	delete[] wszGBK;
	return strGBK;
}

同时,vs中的编码格式是gbk,所以在网络中一般都是使用utf8的编码格式来进行传输的,所以需要gbk转utf8格式

下面是转换:

std::string gbkToUtf8(const std::string &strGBK)
{
	int len = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
	wchar_t * wszUtf8 = new wchar_t[len];
	memset(wszUtf8, 0, len);
	MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, wszUtf8, len);

	len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
	char *szUtf8 = new char[len + 1];
	memset(szUtf8, 0, len + 1);
	WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL, NULL);

	std::string strUTF8(szUtf8);

	delete[] szUtf8;
	delete[] wszUtf8;
	return strUTF8;
}

猜你喜欢

转载自blog.csdn.net/qq_18286031/article/details/95190046