Objective-C - Base64字符串到base64Binary(XML)

时间:2013-07-22 09:41:09

标签: objective-c xml soap base64

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

我根据Web服务的预期字段构建SOAP信封。当类型是 xsd:string xsd: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&amp; ...”的编码问题。

在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:对不起我的英文:/

1 个答案:

答案 0 :(得分:1)

尝试使用CDATA for Base64字符串,如下所示:

<aBase64><![CDATA[%@]]></aBase64>\n