2017-10-11 6 views
0

私はデータから文字列を取得したい場合は、私はString(data: data, encoding: .utf8)を行うdata迅速にgzipデータ

gzip dataに変換するためのgzipライブラリを使用しています。しかし、私が gzip dataについて同じことをすると、 nilという文字列が得られます。なぜなら、gzipデータを.utf8エンコーディングで文字列に変換することは不可能だからです。

サーバー開発者とデータを比較する必要があるため(私のデータが間違った形式であると言われることもあるが、時にはそれは問題ありません。同じライブラリを使用しているので奇妙です。サーバー側に問題がある可能性があります)。

gzipデータを任意の文字列に変換して後で比較する方法はありますか?

+0

'String:(記述:(myGZipData as NSData))'?またはbase64エンコーディング?またはhttps://stackoverflow.com/questions/39075043/how-to-convert-data-to-hex-string-in-swift? – Larme

+0

@Larme、ありがとう、答えが正しい?私はそれをupvoteよ –

答えて

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> 

これは「<hexValue>を印刷NSData-description方法に依存しています" -descriptionに頼ることはほとんどありません(はい、Appleは次のリリースで-descriptionの動作を変更する可能性があります。別のクラスで発生しました)。前回とHow to convert Data to hex string in swiftあなたはあなたに同じ結果を得る(ほとんど、より少ないスペース、および無</>):ほぼ同じ結果を得るために

その他の方法(安全な)は、あなたがこの質問を確認することができます。

その他の方法:ベース64 使用Database64EncodedString()方法:

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

出力:

base64Str: WyJteUFycmF5VmFsdWUwIiwibXlBcnJheVZhbHVlMSJd 

次に、他の方法があるはず: の間(中間値と配列の表現を持ちます0/255)、それはデバッグ目的のためだと思われるので、私があなたに与えた "現在のソリューションを再現する"(作業/速い実装)ができるかどうかを確認し、サーバ開発者に何h e /彼女は自分の側で比較することもできます。

注:このサンプルの目的のために 、myGZipDataは、このように構築される:

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

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

は、それは本当にGZipDataはないが、ゴールはすぐに「十分に大きい」Dataオブジェクトを持っていることでした。