le déencoding de base64 rapide returnne nul

J'essaie de décoder une string base64 en une image dans swift en utilisant le code suivant:

let decodedData=NSData(base64EncodedSsortingng: encodedImageData, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) 

Malheureusement, la variable decodedData s'avère avoir une valeur de zéro

Débogage à travers le code, j'ai vérifié que la variable encodedImageData n'est pas nulle et est datatables d'image codées correctes (vérifiées en utilisant un convertisseur d'image base64 en ligne). Quelle pourrait être la raison derrière mon problème?

Note: Je suis encore nouveau sur Swift et XCode

Merci

Cette méthode nécessite un remplissage avec "=", la longueur de la string doit être multiple de 4.

Dans certaines implémentations de base64, le caractère de remplissage n'est pas nécessaire pour le déencoding, car le nombre d'octets manquants peut être calculé. Mais dans la mise en œuvre de Fundation, c'est obligatoire.

Mise à jour: Comme indiqué sur les commentaires, c'est une bonne idée de vérifier d'abord si la longueur de la string est déjà un multiple de 4. si encoded64 a votre string base64 et ce n'est pas une constante, vous pouvez faire quelque chose comme ceci:

Swift 2

 let remainder = encoded64.characters.count % 4 if remainder > 0 { encoded64 = encoded64.ssortingngByPaddingToLength(encoded64.characters.count + 4 - remainder, withPad: "=", startingAt: 0) } 

Swift 3

 let remainder = encoded64.characters.count % 4 if remainder > 0 { encoded64 = encoded64.padding(toLength: encoded64.characters.count + 4 - remainder, withPad: "=", startingAt: 0) } 

Version d'une ligne mise à jour:

Ou vous pouvez utiliser cette version d'une ligne qui renvoie la même string lorsque sa longueur est déjà un multiple de 4:

 encoded64.padding(toLength: ((encoded64.characters.count+3)/4)*4, withPad: "=", startingAt: 0) 

Lorsque le nombre de caractères est divisible par 4, vous devez éviter le remplissage.

 private func base64PaddingWithEqual(encoded64: Ssortingng) -> Ssortingng { let remainder = encoded64.characters.count % 4 if remainder == 0 { return encoded64 } else { // padding with equal let newLength = encoded64.characters.count + (4 - remainder) return encoded64.ssortingngByPaddingToLength(newLength, withSsortingng: "=", startingAtIndex: 0) } } 

(Swift 3) J'ai été dans cette situation, Essayer d'get datatables en utilisant la string encodée en base64 renvoie zéro avec moi quand j'ai utilisé cette ligne

 let imageData = Data(base64Encoded: strBase64, options: .ignoreUnknownCharacters) 

Essayé de rembourrer la string et ne fonctionnait pas trop

C'est ce qui a marché avec moi

 func imageForBase64Ssortingng(_ strBase64: Ssortingng) -> UIImage? { do{ let imageData = try Data(contentsOf: URL(ssortingng: strBase64)!) let image = UIImage(data: imageData) return image! } catch{ return nil } } 

Une autre version d'une ligne:

 let length = encoded64.characters.count encoded64 = encoded64.padding(toLength: length + (4 - length % 4) % 4, withPad: "=", startingAt: 0)