如何在Swift中将base64String转换为String?

Sak*_*iah 18 base64 swift

我从NSData的webservice响应中接收到base64String,如何在swift中将base64String转换为String?

    //Code
    var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSDictionary  // Response JSON from webservice
    var base64String : String = ""
    base64String = jsonResult["Base64String"] as! String  // Retrieve base64String as string from json response
    println("Base64String Alone: \(base64String)")

// Code to decode that base64String
let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))
                                    println("Decoded:  \(decodedData)")
                                    let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding)
                                    println(decodedString) // Prints nil
Run Code Online (Sandbox Code Playgroud)

base64String的编码和解码适用于仅包含文本的文件,如果文件包含某些表格格式/图像,则编码和解码都会产生无效的base64String.如何将文件转换为base64String编码和解码文件的内容?文件格式为doc,docx,pdf,txt

预谢谢任何帮助!

nRe*_*wik 44

试试这个

let base64Encoded = "YW55IGNhcm5hbCBwbGVhc3VyZS4="

let decodedData = Data(base64Encoded: base64Encoded)!
let decodedString = String(data: decodedData, encoding: .utf8)!

print(decodedString)

println(decodedString)
Run Code Online (Sandbox Code Playgroud)

确保您的base 64编码字符串有效

  • 我曾尝试过这段代码,但收到以下错误"致命错误:在展开Optional值时意外发现nil".怎么修? (8认同)
  • @nRewik,请迅速3 (2认同)

Ash*_*hok 23

Swift扩展很方便.

extension String {
    func base64Encoded() -> String? {
        return data(using: .utf8)?.base64EncodedString()
    }

    func base64Decoded() -> String? {
        guard let data = Data(base64Encoded: self) else { return nil }
        return String(data: data, encoding: .utf8)
    }
}

"heroes".base64Encoded() // It will return: aGVyb2Vz
"aGVyb2Vz".base64Decoded() // It will return: heroes
Run Code Online (Sandbox Code Playgroud)


Meh*_*ico 7

您可以使用此扩展来加密/解密 Base64 字符串:

public extension String {


    var base64Decoded: String? {
        guard let decodedData = Data(base64Encoded: self) else { return nil }
        return String(data: decodedData, encoding: .utf8)
    }

    var base64Encoded: String? {
        let plainData = data(using: .utf8)
        return plainData?.base64EncodedString()
    }
}
Run Code Online (Sandbox Code Playgroud)

编码:

"Hello World!".base64Encoded
Run Code Online (Sandbox Code Playgroud)

结果是可选字符串:“SGVsbG8gV29ybGQh”

解码:

"SGVsbG8gV29ybGQh".base64Decoded
Run Code Online (Sandbox Code Playgroud)

结果是一个可选字符串:“Hello World!”

来源


Tar*_*ior 6

我对Ashok Kumar S的答案进行了更新,以在字符串大小不能被4整除时添加填充符,引发异常并返回nil

extension String {
func base64Encoded() -> String? {
    return data(using: .utf8)?.base64EncodedString()
}

func base64Decoded() -> String? {
    var st = self;
    if (self.count % 4 <= 2){
        st += String(repeating: "=", count: (self.count % 4))
    }
    guard let data = Data(base64Encoded: st) else { return nil }
    return String(data: data, encoding: .utf8)
}
Run Code Online (Sandbox Code Playgroud)


Blu*_*ien 5

上面的答案是核心,但我有一个错误,例如

fatal error, found nil while unwrapping an optional value
Run Code Online (Sandbox Code Playgroud)

解决方案是添加options

extension String {
//: ### Base64 encoding a string
    func base64Encoded() -> String? {
        if let data = self.data(using: .utf8) {
            return data.base64EncodedString()
        }
        return nil
    }

//: ### Base64 decoding a string
    func base64Decoded() -> String? {
        if let data = Data(base64Encoded: self, options: .ignoreUnknownCharacters) {
            return String(data: data, encoding: .utf8)
        }
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

并安全使用

var str = "HelloWorld"
if let base64Str = str.base64Encoded() {
    print("Base64 encoded string: \"\(base64Str)\"")
    if let trs = base64Str.base64Decoded() {
        print("Base64 decoded string: \"\(trs)\"")
    }
}
Run Code Online (Sandbox Code Playgroud)