如何将 base64String 转换为 Swift 中的字符串?
How to convert a base64String to String in Swift?
我从 NSData 中的网络服务响应中接收到一个 base64String,如何将该 base64String 转换为 swift 中的字符串?
//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
base64String 的编码和解码适用于仅包含文本的文件,如果文件包含一些 table formats/images,那么编码和解码都会给出无效的 base64String。如何将文件转换为 base64String 编码和解码文件的任何内容?
文件格式为doc、docx、pdf、txt
预先感谢您的帮助!
试试这个
let base64Encoded = "YW55IGNhcm5hbCBwbGVhc3VyZS4="
let decodedData = Data(base64Encoded: base64Encoded)!
let decodedString = String(data: decodedData, encoding: .utf8)!
print(decodedString)
println(decodedString)
确保您的 base 64 编码字符串有效
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
我已经更新了 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)
}
以上答案是核心,但我有一个错误,如
fatal error, found nil while unwrapping an optional value
解决方法是添加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
}
}
并安全使用它
var str = "HelloWorld"
if let base64Str = str.base64Encoded() {
print("Base64 encoded string: \"\(base64Str)\"")
if let trs = base64Str.base64Decoded() {
print("Base64 decoded string: \"\(trs)\"")
}
}
您可以 encrypt/decrypt 使用此扩展名的 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()
}
}
要编码:
"Hello World!".base64Encoded
结果是可选字符串:“SGVsbG8gV29ybGQh”
解码:
"SGVsbG8gV29ybGQh".base64Decoded
结果是可选字符串:“Hello World!”
我从 NSData 中的网络服务响应中接收到一个 base64String,如何将该 base64String 转换为 swift 中的字符串?
//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
base64String 的编码和解码适用于仅包含文本的文件,如果文件包含一些 table formats/images,那么编码和解码都会给出无效的 base64String。如何将文件转换为 base64String 编码和解码文件的任何内容? 文件格式为doc、docx、pdf、txt
预先感谢您的帮助!
试试这个
let base64Encoded = "YW55IGNhcm5hbCBwbGVhc3VyZS4="
let decodedData = Data(base64Encoded: base64Encoded)!
let decodedString = String(data: decodedData, encoding: .utf8)!
print(decodedString)
println(decodedString)
确保您的 base 64 编码字符串有效
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
我已经更新了 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)
}
以上答案是核心,但我有一个错误,如
fatal error, found nil while unwrapping an optional value
解决方法是添加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
}
}
并安全使用它
var str = "HelloWorld"
if let base64Str = str.base64Encoded() {
print("Base64 encoded string: \"\(base64Str)\"")
if let trs = base64Str.base64Decoded() {
print("Base64 decoded string: \"\(trs)\"")
}
}
您可以 encrypt/decrypt 使用此扩展名的 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()
}
}
要编码:
"Hello World!".base64Encoded
结果是可选字符串:“SGVsbG8gV29ybGQh”
解码:
"SGVsbG8gV29ybGQh".base64Decoded
结果是可选字符串:“Hello World!”