我使用gzip库将data
转换为gzip data
如果我想从数据中获取字符串,我会String(data: data, encoding: .utf8)
。但是如果我对gzip data
做同样的事情,我会得到nil
字符串,因为据我所知,将gzip数据转换为带有.utf8编码的字符串是不可能的。
我需要这个,因为我想与服务器开发人员比较数据(因为他有时候他说我的数据格式不正确,但有时它没关系,这很奇怪,因为我使用相同的库,我有想法可能问题出在服务器端。)
有没有办法将gzip数据转换为任何字符串以便稍后进行比较?
答案 0 :(得分:2)
如果这仅用于调试目的,那么我认为最快的方法是:
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
方法打印&#34; <hexValue>
&#34;。
不要在发布版本上依赖它,几乎从不依赖于-description
(是的,Apple可能会在下一个版本中改变-description
的行为。它发生在另一个类上。)
获得几乎相同结果的其他方式(更安全),你可以检查这个问题:How to convert Data to hex string in swift你得到的结果相同(几乎,空间更少,没有<
/ {{1 }})作为前一个。
其他方式:Base 64
使用>
的{{1}}方法:
base64EncodedString()
输出:
Data
现在,应该有其他方式: 有一个具有Int值的数组表示(介于0/255而不是十六进制),但它似乎是出于调试目的,所以请检查是否可以重现当前的解决方案&#34; (工作/快速实施)我给了你,并与服务器开发人员核实他/她在他/她身边可以做些什么来比较。
注意:
出于此示例的目的,let base64Str = myGZipData?.base64EncodedString()
print("base64Str: \(base64Str!)")
以这种方式构造:
base64Str: WyJteUFycmF5VmFsdWUwIiwibXlBcnJheVZhbHVlMSJd
它不是真正的GZipData,但目标是快速拥有一个myGZipData
对象&#34;足够大&#34;。