当前位置: 首页 > 面试题库 >

如何在Swift中将字符串编码为Base64?

濮丰
2023-03-14
问题内容

我想将字符串转换为Base64。我在几个地方都找到了答案,但是在Swift中它不再起作用了。我正在使用Xcode
6.2。我相信答案可能适用于以前的Xcode版本,而不适用于Xcode 6.2。

有人可以指导我在Xcode 6.2中执行此操作吗?

我发现的答案是这样,但是在我的Xcode版本中不起作用:

var str = "iOS Developer Tips encoded in Base64"
println("Original: \(str)")

// UTF 8 str from original
// NSData! type returned (optional)
let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding)

// Base64 encode UTF 8 string
// fromRaw(0) is equivalent to objc 'base64EncodedStringWithOptions:0'
// Notice the unwrapping given the NSData! optional
// NSString! returned (optional)
let base64Encoded = utf8str.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)
println("Encoded:  \(base64Encoded)")

// Base64 Decode (go back the other way)
// Notice the unwrapping given the NSString! optional
// NSData returned
let data = NSData(base64EncodedString: base64Encoded, options:   NSDataBase64DecodingOptions.fromRaw(0)!)

// Convert back to a string
let base64Decoded = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Decoded:  \(base64Decoded)")

参考:http : //iosdevelopertips.com/swift-code/base64-encode-decode-
swift.html


问题答案:

我没有安装6.2,但我认为6.3在这方面没有任何不同:

dataUsingEncoding 返回一个可选的,所以您需要打开它。

NSDataBase64EncodingOptions.fromRaw已替换为NSDataBase64EncodingOptions(rawValue:)。令人惊讶的是,这不是一个失败的初始化程序,因此您无需拆开包装。

但是,由于它NSData(base64EncodedString:) 一个失败的初始化器,因此您需要对其进行包装。

顺便说一句,所有这些更改都是Xcode迁移器建议的(单击装订线中的错误消息,并带有“ fix-it”建议)。

最终代码经过重写以避免强制展开,如下所示:

import Foundation

let str = "iOS Developer Tips encoded in Base64"
println("Original: \(str)")

let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding)

if let base64Encoded = utf8str?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 
{

    println("Encoded:  \(base64Encoded)")

    if let base64Decoded = NSData(base64EncodedString: base64Encoded, options:   NSDataBase64DecodingOptions(rawValue: 0))
                          .map({ NSString(data: $0, encoding: NSUTF8StringEncoding) })
    {
        // Convert back to a string
        println("Decoded:  \(base64Decoded)")
    }
}

(如果使用Swift 1.2,则可以使用多个if-let代替地图)

Swift 5更新:

import Foundation

let str = "iOS Developer Tips encoded in Base64"
print("Original: \(str)")

let utf8str = str.data(using: .utf8)

if let base64Encoded = utf8str?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) {
    print("Encoded: \(base64Encoded)")

    if let base64Decoded = Data(base64Encoded: base64Encoded, options: Data.Base64DecodingOptions(rawValue: 0))
    .map({ String(data: $0, encoding: .utf8) }) {
        // Convert back to a string
        print("Decoded: \(base64Decoded ?? "")")
    }
}


 类似资料:
  • 问题内容: 我有一个PHP脚本,可以将PNG图像编码为Base64字符串。 我想使用JavaScript做同样的事情。我知道如何打开文件,但不确定如何进行编码。我不习惯使用二进制数据。 问题答案: 您可以使用和来与base64编码进行相互转换。 关于这些功能接受/返回的内容,评论中似乎有些混乱,所以…… 接受一个“字符串”,其中每个字符代表一个8位字节-如果传递的字符串包含不能以8位表示的字符,则

  • 问题内容: 就像标题所说的那样,我正在尝试在Java中将字符串“ test”编码为base32字符串“ ORSXG5A =“。 我在网上搜索时发现的所有类都是使用32位从字符串编码为数组的类,但是显然这不是我想要的。 很抱歉这个新手问题。 问题答案: Apache commons编解码器提供了一个可以执行此操作的类 版画 您可以在此处下载。

  • 问题内容: 我学得很快,并且对将日期String转换为NSDate转换为string感到震惊。我正在以以下格式获取日期字符串:“2015年10月22日星期四07:45:17 +0000”。我需要以MM-dd-yyyy格式显示日期。我尝试了以下代码,但返回“ null”。 谁能帮忙哪里出问题了?期待帮助。提前致谢。 问题答案: 首先,您需要使用其格式将字符串转换为NSDate。然后,将更改为简单格式

  • 问题内容: 如何在Swift中将字符串转换为Unicode(UTF-8)字符串? 在Objective中,我可以这样写: 如何在Swift中做类似的事情? 问题答案: 使用此代码, 希望对您有所帮助

  • 问题内容: 我需要在GWT中将短字符串编码为base 64,并在服务器上解码base 64字符串。有人为此有实用程序类或库吗? 问题答案: 您可以在除IE≤9之外的所有浏览器上的客户端上使用本机JavaScript,在服务器上可以使用官方类之一。 Java / GWT: 编码为。

  • 问题内容: 我试图将dispatch_queue_create与我在运行时创建的动态字符串一起用作第一个参数。编译器抱怨,因为它期望使用标准的c字符串。如果我将其切换为编译时定义的字符串,错误就会消失。谁能告诉我如何将String转换为标准c字符串? 问题答案: 您可以得到如下: 编辑: Beta 5更新- 不再存在(感谢@Sam):