swift gzip数据到字符串问题

时间:2017-10-11 06:45:06

标签: ios swift string gzip nsdata

我使用gzip库将data转换为gzip data

如果我想从数据中获取字符串,我会String(data: data, encoding: .utf8)。但是如果我对gzip data做同样的事情,我会得到nil字符串,因为据我所知,将gzip数据转换为带有.utf8编码的字符串是不可能的。

我需要这个,因为我想与服务器开发人员比较数据(因为他有时候他说我的数据格式不正确,但有时它没关系,这很奇怪,因为我使用相同的库,我有想法可能问题出在服务器端。)

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

1 个答案:

答案 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;。