我正在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:对不起我的英文:/
答案 0 :(得分:1)
尝试使用CDATA for Base64字符串,如下所示:
<aBase64><![CDATA[%@]]></aBase64>\n