Отправить параметр base64Binary SOAP между клиентом Java и сервером PHP - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть сервер PHP SOAP (использующий nuSOAP с wsdl), который отправляет содержимое html-страницы. Конечно, HTML может быть закодирован с помощью другой кодировки, но этот параметр имеет тип base64Binary в XML , и я без проблем получаю HTML в «нативной кодировке».

Чтобы доказать, я кодировал три клиента SOAP в: PHP, C # и Java 6 , и с первыми двумя у меня нет проблем. Java-клиент был создан с использованием WSIMPORT 2.1 и примера кода, который выглядит следующим образом:

FileInputStream file = new FileInputStream (new File ("/tmp/chinese.htm"));
BufferedReader  buffer = new BufferedReader (new InputStreamReader (file
                                             ,"BIG5"));
String line;
String content = "";
while ((line = buffer.readLine()) != null)
   content += line+"\n";

FileManagerAPI upload = new FileManagerAPI();
FileManagerAPIPortType servUpload = upload.getFileManagerAPIPort();

BigInteger result = servUpload.apiControllerServiceUploadHTML (
       "http://www.test.tmp/因此鳥哥建議您務.html", content.getBytes());

Проблема заключается в том, что перед отправкой HTML в кодировке base64 только клиент Java кодирует содержимое HTML в UTF8 , и, когда PHP получает этот файл, сервер управляет им как «Архив UTF8», а не "BIG5 file".

Вопрос в том, как избежать первой кодировки UTF8? или, по крайней мере, выполнить кодировку utf-8 после base64, а не раньше.

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

1 Ответ

1 голос
/ 07 декабря 2011

Похоже, вам нужно сначала преобразовать файл из UTF-8 (я думаю, что это кодировка /tmp/chinese.htm) в BIG5.

Чтобы преобразовать содержимое файла, прочитайте файл и перекодируйте его, например, с помощью iconv:

$path = '/tmp/chinese.htm';
$buffer = file_get_contents($path);
$buffer = iconv('UTF-8', 'BIG5', $buffer);

Буфер $buffer теперь перекодируется из UTF-8 в BIG5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...