我写了一个ATL插件,在插件中,调用CBindStatusCallback类去下载数据,当传入的URL中含有中文字符时,就会下载失败,请问这是什么原因呢?我的工程师UNICODE的BSTR bstr = m_csUrl.AllocSysString();//如果m_csUrl中含有中文字符时,就是下载失败
CMyBindStatusCallback<CMyCtrl>::Download(this, &CMyCtrl::OnData, bstr, m_spClientSite, m_bPathRelative);请高手分析一下,有可能是什么原因造成的呢?字符转换的问题吗?该如何解决?谢谢!

解决方案 »

  1.   


    CBindStatusCallback::Download函数原型为:
    static HRESULT Download(
       T* pT,
       ATL_PDATAAVAILABLE pFunc,
       BSTR bstrURL,
       IUnknown* pUnkContainer = NULL,
       BOOL bRelative = FALSE 
    );BSTR bstrURL这个参数在unicode工程下接收的是unicode编码,这个应该是没错儿吧?如果将它转换成utf-8,那传参的时候不就传不了了吗?哪位大侠出来帮个忙呗~~
      

  2.   

    先查看一下是否是URL含有中文字符而下载失败的原因.
      

  3.   

    失败返回的错误信息是什么?路径不对?
    bstr打印一下是否为正确地中文名称
      

  4.   

    有中文的话,一般会URLEncoding的吧,转成类似%xx%xx%xx这样的
      

  5.   


    嗯,那请问下,有那些API可以进行这样的编码呢?谢谢!
      

  6.   

    http://www.codeproject.com/useritems/URLEncoding.asp?df=100&forumid=439564&select=2250518#xx2250518xx
      

  7.   

    先查看一下是否是URL含有中文字符而下载失败的原因. 
      

  8.   

    越来越让我觉得,csdn上的人都是随便帮你找个东西贴进来而已,这样宁可别回答!