Wininet HTTP请求返回UTF8的JSON数组乱码

wininet 封装 http请求(POST/GET)WEB服务器返回一个UTF8的JSON数组,不经过编码则会显示为乱码,但,通过转换后,中文虽然正确显示,但会有多余的“?”号出现。
过程如下:
int main(int argc, char *argv[]){

AKHTTPWrapper akwrapper;
std::string responseString;
    if(akwrapper.Connect("http://www.chinaeko.net")){
        if(akwrapper.Request("/api.php?m=Business&a=doc2")){
            char buf[1024]="\0";
            while(akwrapper.Response(reinterpret_cast<unsigned char *>(buf), 1024))
                responseString +=(char*) buf ;
        }
        akwrapper.Close();
            std::wstring finalString = UTF8toUnicode(&responseString);
            cout << finalString << endl;
    }
    return 0;
}

//UTF8 to Unicode
std::wstring AKHTTPWrapper::UTF8toUnicode(const std::string &str){
    int  len = 0;
    len = str.length();
    int  unicodeLen = ::MultiByteToWideChar( CP_UTF8,0,str.c_str(),-1,NULL,0);
    wchar_t *  pUnicode;
    pUnicode = new  wchar_t[unicodeLen+1];
    memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
    ::MultiByteToWideChar( CP_UTF8,0,str.c_str(),-1,(LPWSTR)pUnicode,unicodeLen);  
     wstring  rt;
     rt = (wchar_t*)pUnicode;

     delete  pUnicode;
     return  rt;  
}

多余的字符是不是转换的时候长度没控制对

没有证却处理原来字符串中的'\0'导致字符串没有正确截断。
你可以调用下trim函数将?截断。

@caozhy

大牛,你的意思是指 每次接收到buf后,对buf进行trim处理吗?!如下面

while(akwrapper.Response(reinterpret_cast(buf), 1024))
responseString +=(char*) trim(buf) ;//是这样吗!?

@oyljerry

大牛,请指教如何修改转换函数 UTF8toUnicode 才正确? 还是说,我在接收数据时buf的长度要动态分配?但是,buf我是直接把地址传进去的,要确定长度怎么办?