2017-10-11 11 views
0

J'utilise la bibliothèque gzip pour convertir data à gzip datadonnées gzip rapides à problème de chaîne

Si je veux obtenir la chaîne à partir des données que je fais String(data: data, encoding: .utf8). Mais si je fais la même chose pour gzip data, j'obtiens la chaîne nil, parce que, autant que je comprends, il est impossible de convertir les données gzip en chaîne avec l'encodage .utf8. J'ai besoin de ça parce que je veux comparer les données avec un développeur de serveur (parce qu'il dit parfois que mes données sont incorrectes, mais parfois c'est correct, et c'est étrange parce que j'utilise la même bibliothèque, et j'ai des peut-être le problème est sur le côté serveur).

Existe-t-il un moyen de convertir les données gzip en n'importe quelle chaîne pour les comparer ensuite?

+0

'Chaîne: (décrivant: (myGZipData comme NSData))'? ou encodage base64? Ou https://stackoverflow.com/questions/39075043/how-to-convert-data-to-hex-string-in-swift? – Larme

+0

@Larme, merci, pourriez-vous corriger la réponse? Je vais l'emporter –

Répondre

2

Si cela est juste pour les besoins de débogage, alors je pense que la façon la plus rapide est:

let myGZipNSData = myGZipData as! NSData //I wrote a "!" just for the sample) 
print("myGZipNSData: \(myGZipNSData)") 

Il devrait afficher:

myGZipNSData: <5b226d79 41727261 7956616c 75653022 2c226d79 41727261 7956616c 75653122 5d> 

Cela repose sur la méthode -description de NSData qui impriment "<hexValue> ". Ne comptez pas sur elle sur la version de la version, presque jamais compter sur -description (oui, Apple pourrait changer le comportement de -description dans la prochaine version.Elle est arrivé sur une classe différente).

Autre moyen (plus sûr) pour obtenir à peu près le même résultat, vous pouvez vérifier cette question: How to convert Data to hex string in swift que vous vous obtenez le même résultat (presque, moins d'espace, et pas </>) que le précédent.

Autre moyen: Base 64 Utilisez la méthode base64EncodedString() de Data:

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

Sortie:

base64Str: WyJteUFycmF5VmFsdWUwIiwibXlBcnJheVZhbHVlMSJd 

Maintenant, il devrait y avoir un autre moyen: une représentation de tableau avec des valeurs Int (entre 0/255 au lieu de hex), mais il semble être à des fins de débogage donc vérifiez si vous pouvez "reproduire les solutions actuelles" (travail/mise en œuvre rapide) je vous ai donné, et vérifier avec le développeur du serveur ce que h Il peut aussi faire de son côté pour comparer.

Note: Aux fins de cet échantillon, myGZipData est construite de cette façon:

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

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

Ce n'est pas vraiment un GZipData, mais l'objectif était d'avoir rapidement un « assez grand » objet Data.