繁体   English   中英

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

[英]Set encoding between PHP soap server and c# soap client

我有一台PHP SOAP服务器(将nuSOAP与wsdl一起使用)发送html页面的内容。 当然,可以使用不同的编码方式来编码HTML,这就是问题出现的时候了。 如果使用PHP SOAP客户端,则可以发送如下编码:

$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')));

如果我输入正确的编码,到目前为止,它从未失败过。 但是,当我使用C#客户端时,如何将编码放入Web服务请求中? 在C#中,代码为:

          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是wsdl的Web参考,当我看到“上传html”时,某些字符不正确。

提前致谢。

nusoap内部使用php函数xml_parser_create,该函数仅支持: ISO-8859-1,UTF-8和US-ASCII 因此,该库无法与其他编码配合使用。 伟大的PacHecoPe ...

更新:就我而言,最好的选择是以原始编码读取存档并将其转换为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:使用big5之类的UTF-8不支持的编码,上面的代码不能很好地工作。 因此,最好不要将其转换为UTF-8并在wsdl中将html的内容(如base64Binary)设置为参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM