在Java客户端和PHP服务器之间发送base64Binary SOAP参数

时间:2011-12-07 09:01:49

标签: java php nusoap wsimport

我有一个 PHP SOAP 服务器(使用 nuSOAP 和wsdl)发送html页面的内容。当然,HTML可以用不同的编码进行编码,但是这个参数在XML 中是 base64Binary类型,我在“本机编码”中接收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());

问题是在以base64编码发送HTML之前,只有Java客户端将HTML内容编码为UTF8 ,当PHP收到此文件时,服务器将其管理为“UTF8 archive”,而不是就像一个“BIG5文件”。

问题是,如何避免第一次UTF8编码?或者至少在base64之后进行utf-8编码,而不是更早。

提前致谢。

1 个答案:

答案 0 :(得分:1)

看起来您需要先将文件从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。