2017-10-11 95 views
0

我用gzip庫data轉換爲gzip data迅速gzip的數據串的問題

如果我想要得到的字符串從數據我String(data: data, encoding: .utf8)。但是,如果我對gzip data執行相同操作,則會得到nil字符串,因爲據我所知,使用.utf8編碼將gzip數據轉換爲字符串是不可能的。我需要這樣做,因爲我想與服務器開發人員比較數據(因爲他有時候會說我的數據格式不正確,但有時沒關係,這很奇怪,因爲我使用的是同一個庫,我有這樣的想法可能是服務器端的問題)。

有什麼辦法將gzip數據轉換爲任何字符串比較它然後呢?

+0

'字符串:(描述:(myGZipData as NSData))'?或base64編碼?或者https://stackoverflow.com/questions/39075043/how-to-convert-data-to-hex-string-in-swift? – Larme

+0

@Larme,謝謝,你能答對嗎?我會趕上它 –

回答

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> 

這依賴於NSData-description方法,打印「<hexValue> 」。 不要依賴它在發佈版本上,幾乎不會依賴於-description(是的,Apple可以在下一個版本中更改-description的行爲,它發生在不同的類上)。

得到幾乎相同的結果的其他方式(更安全),你可以檢查這個問題:How to convert Data to hex string in swift你得到你同樣的結果(差不多,不佔空間,並沒有</>)作爲前一個。

其他方式:基本64 使用base64EncodedString()Data方法:

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

輸出:

base64Str: WyJteUFycmF5VmFsdWUwIiwibXlBcnJheVZhbHVlMSJd 

現在,應該有其他方式: 具有詮釋值的陣列表示(間0/255而不是十六進制),但它似乎是用於調試的目的,因此請檢查您是否可以「重現當前的解決方案」(工作/快速實施),我向您提供,並與服務器開發人員覈對什麼是h她/她可以在他/她身邊做比較。

注: 對於此示例的目的,myGZipData構造是這樣的:

let array = ["myArrayValue0", "myArrayValue1"] 

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

這不是一個真正的GZipData,但我們的目標是迅速擁有Data對象「足夠大」。