我正在使用iPhone/iPad通過Microsoft的一種ERP產品與基於Windows的Web服務進行通信的項目。過程如下:針對Unicode字符的iOS/Windows XML編碼問題
- 設備查詢數據的Web服務(例如,客戶列表)
- 的web服務,查詢信息
- 的ERP數據庫中的數據被格式化爲XML時, XML使用.NET GZIP庫進行壓縮,壓縮數據(字符串)以base 64編碼,然後在XML消息結構中傳輸回設備
- 設備獲取base 64編碼的字符串,使用GZIP對其進行解壓縮,然後解析XML
- 解析的數據存儲在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];
}
其他人都知道爲什麼會發生這種情況?我剛剛在Windows中嘗試了這封信,將其保存爲UTF-8編碼的XML(我已經驗證其實是UTF-8),並且在iOS中顯示爲「£(原始值爲/ u201c/u00a3)。我已經嘗試了所有其他NS編碼選項在陽光下無濟於事(價值的變化,但它仍然是胡言亂語)。 – user2119940