阅读背景:

Unicode与UTF-8转换

来源:互联网 
/*
	*Unicode转换成UTF-8
	*@param strUnicode: 待转换的CString
	*@param szUtf8:转换后的UTF-8
	*@return:返回UTF-8格式的长度
	*/
	int UniToUTF8( wchar_t* pUniString, char *szUtf8 )
	{
		int nLen = WideCharToMultiByte(CP_UTF8, 0, pUniString, -1, NULL, 0, NULL, NULL); 
		char *szUtf8Temp = new char[nLen + 1];
		memset( szUtf8Temp, 0, nLen + 1 ); 
		WideCharToMultiByte ( CP_UTF8, 0, pUniString, -1, szUtf8Temp, nLen, NULL, NULL ); 
		sprintf( szUtf8, "%s", szUtf8Temp );
		delete[] szUtf8Temp;
		return nLen;
	}
	int UniToUTF8( wchar_t* pUniString, std::string& strUtf8 )
	{
		int nLen = WideCharToMultiByte(CP_UTF8, 0, pUniString, -1, NULL, 0, NULL, NULL); 
		char *szUtf8Temp = new char[nLen + 1];
		memset( szUtf8Temp, 0, nLen + 1 ); 
		WideCharToMultiByte ( CP_UTF8, 0, pUniString, -1, szUtf8Temp, nLen, NULL, NULL ); 
		strUtf8 = szUtf8Temp;
		delete[] szUtf8Temp; 
		return nLen;
	}

	/*
	*UTF-8转换成Unicode
	*@param UTF8: 待转换的的UTF-8
	*@return:返回Unicode格式的字符串
	*/
	CString UTF8ToUni( char* UTF8 )
	{
		DWORD dwUnicodeLen;        //转换后Unicode的长度
		wchar_t *pwText;            //保存Unicode的指针
		CString strUnicode;        //返回值

		//获得转换后的长度,并分配内存
		dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0);
		pwText = new wchar_t[dwUnicodeLen];
		if (!pwText)
		{
			return strUnicode;
		}
		//转为Unicode
		MultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen);
		//转为CString
		strUnicode.Format(_T("%s"),pwText);
		//清除内存
		delete []pwText;
		//返回转换好的Unicode字串
		return strUnicode;
	}

	CString UTF8ToUni( std::string& strUTF8 )
	{
		DWORD dwUnicodeLen;       //转换后Unicode的长度
		wchar_t *pwText;          //保存Unicode的指针
		CString strUnicode;       //返回值

		//获得转换后的长度,并分配内存
		dwUnicodeLen = MultiByteToWideChar( CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0 );
		pwText = new wchar_t[ dwUnicodeLen ];
		if ( !pwText ){
			return strUnicode;
		}

		//转为Unicode
		MultiByteToWideChar( CP_UTF8, 0, strUTF8.c_str(), -1, pwText, dwUnicodeLen );
		strUnicode = pwText;

		//清除内存
		delete [] pwText;
		return strUnicode;
	}/*
	*Unicode转换成UTF-8
	*@param strUnicode: 待转换的C



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: