0

我正在开展一个项目,该项目使用 iPhone/iPad 通过 Microsoft 的 ERP 产品之一与基于 Windows 的 Web 服务进行通信。过程如下:

  1. 设备向 Web 服务查询数据(例如,客户列表)
  2. Web 服务查询 ERP 数据库以获取信息
  3. 将数据格式化为 XML,使用 .NET GZIP 库对 XML 进行压缩,压缩后的数据(字符串)进行 base 64 编码,然后以 XML 消息结构传输回设备
  4. 设备获取 base 64 编码字符串,使用 GZIP 对其进行解压缩,然后解析 XML
  5. 解析后的数据存储在 SQLite 中并显示给用户等。

这一切都适用于国际字符之外的所有内容。例如:

ERP/Windows 发送(可在 ERP、数据库、IE 中保存为 XML 或在记事本中作为 UTF-8 编码文件甚至 ANSI 文件查看): Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ

iOS 作为原始 XML 值: \u201c\u00e4 \u201c\u00f1 \u201c\u00ef \u201c\u00bd \u201c\u00c5 \u201c\u00bb \u201c\u00fb \u201c\u2020 \u201c\u00a3 \u2022\u0152 \u u02c6 \u201c\u008f

iOS 作为 XML 中的显示值: “ä”ñ““Å”»“û”†“£“Œ •^”</p>

我确信这在某种程度上是一个编码的东西,但我已经尝试了所有编码/解码值的方法,但没有运气。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];
}
4

1 回答 1

0

尝试这个:

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

并将其传递给 XMLParser。看看它是否工作。

如果你能解析数据。然后您必须手动更改字符,例如,

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

希望能帮助到你!!

于 2013-07-31T05:05:46.450 回答