2013-07-22 66 views
1

我正在iOS上開發一個應用程序,請求使用SOAP的Web服務,並且我有一個數據類型爲xsd:base64Binary(XML)的問題。Objective-C - Base64字符串到base64Binary(XML)

我根據Web服務的預期字段構建我的SOAP信封。當類型是xsd:字符串xsd:整數或任何其他簡單類型,我沒有問題。 但是,當我嘗試添加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 Service寫着 「假」, 「89」, 「0.0」 或 「你好」 沒有任何問題。但是對於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:對不起,我的英語:/

回答

1

嘗試使用CDATA對Base64編碼字符串是這樣的:

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

希望它能幫助!! ... –

+0

根據[此鏈接](HTTP:/ /www.ibm.com/developerworks/library/x-cdata/)使用CDATA是一個好主意,但它不起作用; Web服務收到的字符串與以前完全相同:/ 但是,非常感謝您的回答。 –

+0

你是最受歡迎的......但你能告訴我你有什麼確切的錯誤嗎? –