[英]Objective-C - Base64 string to base64Binary (XML)
我正在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&...''这样的编码问题。
在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.