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


Send base64Binary SOAP parameter between Java client and PHP server

我有一个PHP SOAP服务器(使用nuSOAP with wsdl)发送html页面的内容。当然,HTML可以用不同的编码进行编码,但是这个参数是base64Binary type in XML,我收到的HTML是"本机编码",没有问题。

为了证明,我已经用PHP、c#和Java 6编写了三个SOAP客户端,前两个我没有问题。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存档",而不是像"BIG5文件"。

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

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