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

时间:2011-11-23 10:57:41

标签: c# php soap nusoap

我有一个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引用,当我看到“upload html”时,某些字符不正确。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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