Установите кодировку между мыльным сервером PHP и мыльным клиентом c # - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть сервер 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 #, как я могу поместить кодировку в петицию веб-службы?В 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, и когда я вижу «загрузить HTML», некоторые символы некорректны.

Заранее спасибо.

1 Ответ

0 голосов
/ 23 ноября 2011

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: С кодировкой, которая не поддерживается в UTF-8, такой как big5, не очень хорошо работает вышеуказанный код. По этой причине лучше не выполнять преобразование в UTF-8 и устанавливать параметр с содержимым html, например base64Binary , в wsdl.

...