1

我正在 iOS 上开发一个应用程序,请求使用 SOAP 的 Web 服务,但数据类型xsd:base64Binary (XML) 存在问题。

我根据来自 Web 服务的预期字段构建我的 SOAP 信封。当类型是xsd:stringxsd:integer或任何其他简单类型时,我没有问题。但是当我尝试将xsd:base64Binary类型添加到 SOAP 信封时,Web 服务无法正确接收数据;这似乎是一个编码问题,但我无法弄清楚。

例如,信封看起来像:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema- to instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <hereTheMethod xmlns="http://heretheaddress/">
      <aBase64>/9j/4AAQSkZJRgAB...
              ...RRQAUUUUAf/Z</aBase64>
      <aBool>false</aBool>
      <anInt>89</anInt>
      <aDouble>0.0</aDouble>
      <aString>Hello</aString>
    </hereTheMethod>
  </soap12:Body>
</soap12:Envelope>

然后 Web 服务读取“false”、“89”、“0.0”或“Hello”没有任何问题。但是对于 base64,我有类似“����JFIF��XExifMM*�i&...”之类的编码问题。

在 Objective-C 中,我进行如下操作:

NSMutableString *envelopeText = [NSMutableString stringWithFormat:@"(header)\n"
    "<aBase64>%@</aBase64>\n"
    "(footer)", base64String];

// Some code...

NSData *envelope = [envelopeText dataUsingEncoding:NSUTF8StringEncoding];

// I launch the connection.

最后,当我构建 base64 字符串时,我注意用 UTF-8 对其进行编码,例如:

NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

请注意,该应用程序也适用于 Android (Java),并且可以正确使用相同的 Web 服务。

谢谢你的帮助 !

PS:对不起我的英语:/

4

1 回答 1

1

尝试将 CDATA 用于 Base64 字符串,如下所示:

<aBase64><![CDATA[%@]]></aBase64>\n
于 2013-07-22T09:52:25.657 回答