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


Set encoding between PHP soap server and c# soap client

我有一个PHP SOAP服务器(使用带有wsdl的nuSOAP),它发送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);

测试。FileManager是wsdl的Web引用,当我看到"上载html"时,一些字符不正确。

nusoap内部使用php函数xml_parser_create,该函数只支持:ISO-8859-1, UTF-8和US-ASCII。由于这个原因,这个库不能很好地与其他编码一起工作。伟大的PacHecoPe…

UPDATE:在我的情况下,最好的选择是读取原始编码的存档文件,并将其转换为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:使用UTF-8不支持的编码,如big5,上面的代码不能很好地工作。出于这个原因,最好不要转换为UTF-8,并在wsdl.

中使用html的内容设置参数,如base64Binary