1、直接在浏览器打开“http://sg1.api.bing.com/qsonhs.aspx?q=设计”会返回JSON数据
2、在VC++中bool CQuickSearchDlg::getSearchJson(const TCHAR * keyword, TCHAR * json)
{
    wchar_t isonUrl[200] = _T("http://sg1.api.bing.com/qsonhs.aspx?q=设计");
    CInternetSession cSession;
    CHttpFile *cFile;
    char sRecived[1024] = {0};
    CString szAllData = _T("");    try
    {
        cFile = (CHttpFile *)cSession.OpenURL(isonUrl);
    }
    catch(CInternetException * m_pException)
    {
        cFile = NULL;
        m_pException->m_dwError;
        m_pException->Delete();
        cSession.Close();
        AfxMessageBox(_T("CInternetException"));
        return false;
    }    DWORD dwStatusCode;
    cFile->QueryInfoStatusCode(dwStatusCode);
    if(dwStatusCode == HTTP_STATUS_OK)
    {
        while(cFile->ReadString((LPTSTR)sRecived, 1024) != NULL)
            szAllData += sRecived;
        int a = 0;
    }
    else
    {
        MessageBox(_T("请求失败。"));
    }
    cFile->Close();
    delete cFile;
    cSession.Close();    return true;
}
获取到的szAllData数据却是:{"AS":{"Query":"设计","FullResults":0}}
这是哪里出问题了呢?vc++jsonCInternetSession OpenURL

解决方案 »

  1.   

    编码问题
    转为UTF-8编码就可以了
    例如“设计”的UTF-8码是E8AEBE E8AEA1http://sg1.api.bing.com/qsonhs.aspx?q=%E8%AE%BE%E8%AE%A1
      

  2.   


    已知char utf[10]里面存储了以UTF-8编码存储的字符,如何获得相应的十六进制字符编码?
      

  3.   


    char utf[10];
    char utff[30];
    for (int n = 0; n < strlen(utf); n ++)
    {
      sprintf(&utff[n * 3], "%%%02x", utf[n]);
    }
      

  4.   

    有点小问题,再次请教stjay, 程序:
        for (; i < len; i++)
        {
            printf("%%%#02x\n", pchDestStr[i]);
        }
    输出为:
    ab你好12:
    %0x61
    %0x62
    %0xffffffe4
    %0xffffffbd
    %0xffffffa0
    %0xffffffe5
    %0xffffffa5
    %0xffffffbd
    %0x31
    %0x32
    请按任意键继续. . .
    我希望的输出为:
    ab你好12:
    0x61,0x62,0xE4,0xBD,0xA0,0xE5,0xA5,0xBD,0x31,0x32