我有一个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”时,某些字符不正确。
提前致谢。
答案 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 。