繁体   English   中英

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

[英]Objective-C - Base64 string to base64Binary (XML)

我正在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:对不起,我的英语是:/

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM