代码之家  ›  专栏  ›  技术社区  ›  Paul T.

swift gzip数据到字符串问题

  •  0
  • Paul T.  · 技术社区  · 8 年前

    data gzip data

    如果我想从数据中获取字符串,我会 String(data: data, encoding: .utf8) . 但如果我也这么做 gzip数据 nil 字符串,因为据我所知,不可能用将gzip数据转换为字符串。utf8编码。

    我之所以需要它,是因为我想与服务器开发人员比较数据(因为他有时说我的数据格式不正确,但有时还可以,这很奇怪,因为我使用的是同一个库,我认为可能是服务器端的问题)。

    有没有办法将gzip数据转换成任何字符串,以便稍后进行比较?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Larme    8 年前

    如果这只是为了调试,那么我认为最快的方法是:

    let myGZipNSData = myGZipData as! NSData //I wrote a "!" just for the sample)
    print("myGZipNSData: \(myGZipNSData)")
    

    它应该输出:

    myGZipNSData: <5b226d79 41727261 7956616c 75653022 2c226d79 41727261 7956616c 75653122 5d>
    

    -description NSData <hexValue> ". 不要依赖它发布版本,几乎从不依赖 -描述 (是的,苹果可以改变 -描述 在下一版本中。它发生在另一个班级)。

    为了获得几乎相同的结果,您可以检查以下问题: How to convert Data to hex string in swift 你会得到同样的结果(几乎,更少的空间,没有 < / > )与前一个相同。

    其他方式:Base 64 base64EncodedString() Data :

    let base64Str = myGZipData?.base64EncodedString()
    print("base64Str: \(base64Str!)")
    

    输出:

    base64Str: WyJteUFycmF5VmFsdWUwIiwibXlBcnJheVZhbHVlMSJd
    

    有一个Int值的数组表示(在0/255之间,而不是十六进制),但它似乎是为了调试目的,所以请检查您是否可以“复制我给您的当前解决方案”(工作/快速实现),并与服务器开发人员检查他/她也可以做些什么来进行比较。

    注: 就本样本而言, myGZipData 结构如下:

    let array = ["myArrayValue0", "myArrayValue1"]
    
    let myGZipData = try? JSONSerialization.data(withJSONObject: array, options:[])
    

    它并不是一个真正的gzip数据,但目标是快速获得一个 数据 对象“足够大”。