1930465|总操作数|138|2009-6-18 12:09:00$$1930466|静态认证总数|134|2009-6-18 12:09:00$$1930467|静态认证成功数|119|2009-6-18 12:09:00$$1930468|动态认证总数|4|2009-6-18 12:09:00$$1930469|动态认证成功数|4|2009-6-18 12:09:00$$1930470|注册总数|0|2009-6-18 12:09:00$$1930471|成功注册总数|0|2009-6-18 12:09:00$$1930472|修改总数|0|2009-6-18 12:09:00$$1930473|修改成功数|0|2009-6-18 12:09:00$$1930474|绑定总数|0|2009-6-18 12:09:00$$1930475|绑定成功数|0|2009-6-18 12:09:00$$1930476|升级总数|0|2009-6-18 12:09:00我读到的数据大概是上面这个样子。基中有一段数据如下:       1931088|0|1烫烫烫烫23|2009-6-18 12:47:00    可见中间中乱码。而在一个已经有的成熟的项目里 读 这些数据的时候没有乱吗。 说明数据本身的 存储是正确的。 只是读的时候 出现的问题。而我用我自己的工程  ,  用 “和成熟的项目里一样的方法” 读是就会产生乱码。不知道是什么原因 。又怎么解决呢。

解决方案 »

  1.   


    我没关心这个问题。因为不太懂 unicode   
    顺便说一下。   1931088|0|1烫烫烫烫23|2009-6-18 12:47:00    
                   正确的值 应该是 1931088|0|123|2009-6-18 12:47:00    
      

  2.   

    怎么来 转换呢?
    我读数据的方法是  
    url.Format("%s/loaddataminute.asp?uid=%s&pwd=%s&tbname=%s&startpos=%d&mode=%d&starttime=%s&endtime=%s&rnd=%d",DataSourceURL,m_uid,m_pwd,m_tbname,pos,mode,starttime,endtime,rand()); CString strData = m_session.GetUrlEx (url.GetBuffer(0));
      

  3.   

    我估计是你接收缓冲区处理算法有错误
    1931088|0|1 和 23|2009-6-18 12:47:00 是分两次收到的,
    接收到1931088|0|1以后,你多copy了几个字节
      

  4.   

    我想你的变量没有初始化,“烫”在debug环境下就是栈变量没有初始化。
      

  5.   

    问题还是没有解决。 我今天又观察了一下 之前用过几年的 成熟的 项目 。也发现有 这样的问题。这就说明 这个问题不是 由我新建的 项目 而新产生的问题。我把读数据的代码贴出来。希望高手们能帮我分析一下原因 。 谢谢CString CCurveChartCtrl::LoadData_1(int mode,long pos,  CString starttime, CString endtime )
    {
    CString url = ""; CWebSiteSession *sess = GetSession();
    url.Format("%s/loaddataminute.asp?uid=%s&pwd=%s&tbname=%s&startpos=%d&mode=%d&starttime=%s&endtime=%s&rnd=%d",DataSourceURL,m_uid,m_pwd,m_tbname,pos,mode,starttime,endtime,rand()); CString strData = sess->GetUrlEx (url.GetBuffer(0));
    if (!strData.IsEmpty())
    {
    url = strData.GetBuffer(strData.GetLength());
    }
    else 
    {
    url ="";
    }
    return url;
    }楼上的几位朋友说变量没有初始化。我也没找到原因 。
      

  6.   

     其中  GetUrlEx()的实现为CString CWebSiteSession::GetUrlEx(LPCTSTR url, char *lpszVerb)
    {
    CString strReturn; if (m_hCon == NULL && m_hInternetSession != NULL)
    {
    HINTERNET hURL = InternetOpenUrl(m_hInternetSession,url,NULL,0,0,0); if( hURL == NULL )
    {
    return strReturn;
    } DWORD readsize = 1; while( readsize != 0 )
    {
    char szBuffer[1024];
    memset(szBuffer, 0, 1024 * sizeof(char));
    InternetReadFile(hURL, szBuffer, 1024, &readsize);
                strReturn += szBuffer;
    }
    InternetCloseHandle(hURL);
    } return strReturn;
    }
      

  7.   

    问题解决。 谢谢各位朋友。  问题出在了 我上面 GetUrlEx() 这个 方法中。 其中有几句:while( readsize != 0 ) 

    char szBuffer[1024]; 
    memset(szBuffer, 0, 1024 * sizeof(char)); 
    InternetReadFile(hURL, szBuffer, 1024, &readsize); 
                strReturn += szBuffer; 
    } 错误 就在这里
    char szBuffer[1024]; 
    memset(szBuffer, 0, 1024 * sizeof(char)); 在我新建的 项目里  我每次读的 数据 比 原来 “成熟的项目”多了。 szBuffer[1024]  不够了。 我把 szBuffer改大一些就好了。原来“成熟的项目”出错的原因也是因为我 这样改的。
    谢谢 上面的 各位朋友的帮助。  也提醒大前能注意这个问题。