dongshi3818 2011-11-23 10:57
浏览 73
已采纳

在PHP soap服务器和c#soap客户端之间设置编码

I have a PHP SOAP server (using nuSOAP with wsdl) that send the content of a html page. Of course, the HTML can be coded with differents encoding and here is when the problems appear. If I used a PHP SOAP client I can send the encoding like this:

$clienteSOAP = new SoapClient ("http://test.mine.com/wsdl/filemanager?wsdl",
                               array ('encoding' => 'ISO-8859-15'));
$clienteSOAP->__soapCall ("Test.uploadHTML",
             array (file_get_contents ('/home/КОЛЛЕКЦИЯ_РОДНИК_ПРЕМИУМ.html')));

And if I put the correct encoding, has never failed so far. But when I use a C# client, how can I put the encoding in the web service petition? In C# the code is:

          System.IO.StreamReader html = new System.IO.StreamReader (
                     "C:\\Documents and Settings\\КОЛЛЕКЦИЯ_РОДНИК_ПРЕМИУМ.html"
                     ,System.Text.Encoding.GetEncoding("iso-8859-15"));
          string contenido = html.ReadToEnd();
          html.Close();

          Test.FileManager upload = new Test.FileManager();
          string resultado = upload.TestUploadHTML (contenido);

Test.FileManager is a Web reference of the wsdl, and when I see the "upload html" some characters aren't correct.

Thanks in advance.

  • 写回答

1条回答 默认 最新

  • dqkv0603 2011-11-23 11:26
    关注

    nusoap internally uses the php function xml_parser_create, that only supports: ISO-8859-1, UTF-8 and US-ASCII. For this reason, this library don't works well with other encoding. Great PacHecoPe...

    UPDATE: The best option, in my case, is read the archive in its original encoding and transform it to utf-8:

    System.IO.StreamReader html = new System.IO.StreamReader (
                     "C:\\Documents and Settings\\КОЛЛЕКЦИЯ_РОДНИК_ПРЕМИУМ.html"
                     ,System.Text.Encoding.GetEncoding("iso-8859-15"));
    
    string contenido = html.ReadToEnd();
    html.Close();
    
    System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes (contenido);
    string contenidoUTF8 = encoder.GetString(bytes);
    
    upload.RequestEncoding = System.Text.Encoding.GetEncoding("UTF-8");
    
    Test.FileManager upload = new Test.FileManager();
    string resultado = upload.TestUploadHTML (contenidoUTF8);
    

    UPDATE2: With encoding that not supported in UTF-8 like big5, don't work very well the above code. For this reason, it's better don't make the transform to UTF-8 and set the parameter with the content of html like base64Binary, in the wsdl.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法