关于在UNICODE CString转UTF-8

如何Unicode下,将CString转成UTF-8。
例如:
CString xx="您好"
CSting str=URLEnCode(xx);
转换后的结果:str的内容就是%e6%82

CString str(_T("我是中国人"));
CT2A szUtf8(str,CP_UTF8);
string s_utf8(szUtf8);
CString strRet;
//转换成URL encode
ConvertStringToURLCoding(strRet,s_utf8.c_str(),s_utf8.length

/////////////////////////......
答案就在这里:Unicode下CString转UTF-8,再转UTF-8的%形式
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

 char* UnicodeToUtf8(CString unicode)
{
    int len;  
    len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)unicode, -1, NULL, 0, NULL, NULL);  
    char *szUtf8=new char[len + 1];
    memset(szUtf8, 0, len * 2 + 2);
    WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)unicode, -1, szUtf8, len, NULL,NULL);
    return szUtf8;
}
 #include "stdafx.h"
#include <iostream>
#include <atlstr.h> // for CString

#include <windows.h>
#include <lm.h>
using namespace std;

char* CreateUTF8TextInitWithString(CString strValue)
{
    char *buffer = NULL;
    int  length;

#ifdef _UNICODE
    length = WideCharToMultiByte(CP_UTF8, 0, strValue, -1, NULL, 0, NULL, NULL);
#else
    return NULL;
#endif
    if (length <= 0)
    {
        return NULL;
    }

    buffer = new char[length];
    if (buffer == NULL)
    {
        return NULL;
    }

    ZeroMemory(buffer, length);

#ifdef _UNICODE
    WideCharToMultiByte(CP_UTF8, 0, strValue, -1, buffer, length, NULL, NULL);
#else
    strcpy_s(buffer, length, strValue);
#endif

    return buffer;
}


BOOL CreateString_InitWithUTF8Text(CString& str, char* pUTF8Text)
{
    if (NULL == pUTF8Text)
    {
        return FALSE;
    }

    int  unicodeLen = ::MultiByteToWideChar( CP_UTF8,
        0,
        pUTF8Text,
        -1,
        NULL,
        0 ); 

    wchar_t*  pUnicode = new  wchar_t[unicodeLen+1];
    if (NULL == pUnicode)
    {
        return FALSE;
    }

    MultiByteToWideChar( CP_UTF8, 0, pUTF8Text, -1, (LPWSTR)pUnicode, unicodeLen );

    str = pUnicode;

    delete []pUnicode;
    return TRUE;
}


int _tmain()
{
    // 转换 CString 到 utf-8编码
    char* buff = CreateUTF8TextInitWithString(CString(TEXT("这都不是问题吧。"))); 

    // 转换 utf-8 到 CString 编码
    CString str;
    if (CreateString_InitWithUTF8Text(str, buff))
    {
        cout << "successed... ";
    }

    delete []buff;
    return 0;
}