2013-07-30 48 views
0

我正在使用iPhone/iPad通過Microsoft的一種ERP產品與基於Windows的Web服務進行通信的項目。過程如下:針對Unicode字符的iOS/Windows XML編碼問題

  1. 設備查詢數據的Web服務(例如,客戶列表)
  2. 的web服務,查詢信息
  3. 的ERP數據庫中的數據被格式化爲XML時, XML使用.NET GZIP庫進行壓縮,壓縮數據(字符串)以base 64編碼,然後在XML消息結構中傳輸回設備
  4. 設備獲取base 64編碼的字符串,使用GZIP對其進行解壓縮,然後解析XML
  5. 解析的數據存儲在SQLite和向用戶顯示等。

這一切都適用於所有的東西國際字符。例如: A A E:(當保存爲XML,或在記事本爲UTF-8編碼的文件,甚至ANSI文件可見在ERP,在數據庫中,在IE)

ERP/Windows發送E I I OöU U Y Y

的iOS作爲原始XML值: \ u201c \ u00e4 \ u201c \ u00f1 \ u201c \ u00ef \ u201c \ u00bd \ u201c \ u00c5 \ u201c \ u00bb \ u201c \ u00fb \ u201c \ u2020 \ u201c \ u00a3 \ u201c \ u0152 \ U2022 \ u02c6 \ u201c \ u008f

的iOS作爲來自XML顯示值:「A「ñ「I「½「A「» û「†「£「Œ•「

我敢肯定,這是在一定程度上編碼的事情,但我已經試過編碼的每個方法/沒有運氣解碼值。 XML通過.NET 4.0 System.Xml.XmlDocument類處理,並使用UTF-8。 iOS應該使用UTF-8來解碼它。

對於它的價值,我已經使用TBXML和GDataXML來解析iOS中的XML數據,並且都返回相同的結果。

任何人都可以指向正確的方向嗎?唯一相關的代碼,我能想到的分享是從高位減壓代碼的iOS:

+ (NSString*) base64DecodeAndDecompress:(NSString*)compressedString 
{ 
    NSData *compressedData = [NSData dataFromBase64String:compressedString]; 

    if(compressedData == nil) 
    { 
     return [[NSString alloc] initWithString:@""]; 
    } 

    NSData *uncompressedData = [QiwiGZIP gunzipData:compressedData]; 

    if(uncompressedData == nil) 
    { 
     return [[NSString alloc] initWithString:@""]; 
    } 

    return [[NSString alloc] initWithData:uncompressedData encoding:NSUTF8StringEncoding]; 
} 
+0

其他人都知道爲什麼會發生這種情況?我剛剛在Windows中嘗試了這封信,將其保存爲UTF-8編碼的XML(我已經驗證其實是UTF-8),並且在iOS中顯示爲「£(原始值爲/ u201c/u00a3)。我已經嘗試了所有其他NS編碼選項在陽光下無濟於事(價值的變化,但它仍然是胡言亂語)。 – user2119940

回答

0

試試這個:

NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

,並把它傳遞給XMLParser的。看看它的工作。

如果你可以解析數據。那麼你必須手動更改字符,如

[self replaceOccurrencesOfString:@"&" withString:@"&" options:NSLiteralSearch range:NSMakeRange(0, [self length])]; 
    [self replaceOccurrencesOfString:@""" withString:@"\"" options:NSLiteralSearch range:NSMakeRange(0, [self length])]; 

希望它有助於!

+0

本週我會給這個鏡頭 - 謝謝你的反饋! – user2119940

+0

不幸的是,這不起作用...我的問題是,由於某些未知原因,字符在Windows和iOS之間發生了變化。我不知道爲什麼iOS似乎無法處理XML編碼。 – user2119940