简体   繁体   中英

Decode base64 to binary file in swift

How can I decode base64 binary file to the file in swift?like docx I used this code but return always nil.

if let decodedData = NSData(base64EncodedString:"base64string" , options:.Ig(rawValue: 0)),
               let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) {
               print(decodedString) 
           }

You are supposed to pass a base 64-string into the NSData -initializer ( "base64string" is not a valid base64, hence the initializer returns nil).

let stringToEncode = "testString"
let stringData = stringToEncode.dataUsingEncoding(NSUTF8StringEncoding)

let base64String = stringData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

if let decodedData = NSData(base64EncodedString:base64String , options: .IgnoreUnknownCharacters),
    let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) {
    print(decodedString)
}
let myString = "my data"

Encoding

let plainData = (myString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)
println(base64String)

Decoding

if let decodedData = NSData(base64EncodedString: base64String, options:NSDataBase64DecodingOptions.fromRaw(0)!) {
let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding)    
println(decodedString)
}

In Swift 4, you can do base64 encoding or decoding like this:

extension Data {

    init?(base64String: String) {
        self.init(base64Encoded: base64String)
    }

    var base64String: String {
        return self.base64EncodedString()
    }

}

extension String {

    init?(base64String: String) {
        guard let data = Data(base64String: base64String) else {
            return nil
        }
        self.init(data: data, encoding: .utf8)
    }

    var base64String: String {
        return self.data(using: .utf8)!.base64String
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM