我使用gzip库将data
转换为gzip data
如果我想从数据中获取字符串,我会执行String(data: data, encoding: .utf8)
。但如果我对gzip data
做同样的操作,我会得到nil
字符串,因为据我所知,不可能将gzip数据转换为使用.utf8编码的字符串。
我需要它,因为我想与服务器开发人员比较数据(因为他有时会说我的数据格式不正确,但有时还好,这很奇怪,因为我使用的是同一个库,我认为问题可能出在服务器端)。
有没有办法将gzip数据转换为任何字符串,以便稍后进行比较
如果这只是为了调试目的,那么我认为最快的方法是:
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>
这依赖于打印"<hexValue>
"的NSData
的-description
方法。在发布版本上不要依赖它,几乎永远不要依赖-description
(是的,苹果可以在下一个版本中改变-description
的行为。它发生在另一个类上)。
其他方法(更安全)可以得到几乎相同的结果,你可以检查这个问题:如何在swift中将数据转换为十六进制字符串,你会得到与前一个相同的结果(几乎,更少的空间,没有<
/>
)。
其他方式:Base 64使用Data
的base64EncodedString()
方法:
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:[])
它并不是一个真正的GZipData,但目标是快速拥有一个"足够大"的Data
对象。