gpt4 book ai didi

ios - Swift 2 base64 编码产生不同的结果

转载 作者:可可西里 更新时间:2023-11-01 05:11:29 32 4
gpt4 key购买 nike

swift 1.2

let apiLoginString = NSString(format: "%@:%@", API_USERNAME, API_PASSWORD);
let apiLoginData: NSData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions(nil);

swift 2

let apiLoginString = NSString(format: "%@:%@", API_USERNAME, API_PASSWORD);
let apiLoginData: NSData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions());

这两种方法产生不同的结果。在 Swift 2 中,我们不能再传入 nil

apiLoginData.base64EncodedStringWithOptions(nil);

我也尝试在 Swift 2 中传入 NSDataBase64EncodingOptions.Encoding64CharacterLineLength。但结果仍然不同

有什么想法吗?

更新 2:这不是 Swift 1.2 或 Swift 2 的问题。奇怪的是,这 2 个版本打印出不同的结果。这该死!

更新 3:事实证明,正如 Martin 所指出的,我的 API_USERNAME 变量中有一些不可见的字符

class RequestHelper: NSObject {
static var API_USERNAME: NSString = "⁠⁠⁠abc";
static var API_PASSWORD: NSString = "123";
static var USERNAME: NSString = "abc"
static var PASSWORD: NSString = "123"


class func signUpUser() {
//Base64
var loginString = NSString(format: "%@:%@", USERNAME, PASSWORD);
var loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64LoginString = loginData.base64EncodedStringWithOptions([]);

print("BASE 64 \(base64LoginString)");//RESULT YWJjOjEyMw==

let apiLoginString = NSString(format: "%@:%@", API_USERNAME, API_PASSWORD);
let apiLoginData: NSData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!;
var base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions([]);

print("BASE 64 \(base64ApiLoginString)");// RESULT IS 4oGg4oGg4oGgYWJjOjEyMw==
}

最佳答案

类似于Swift 2.0 calendar components errorSwift 2.0 - Binary Operator "|" cannot be applied to two UIUserNotificationType operands ,
NSDataBase64EncodingOptions 是 Swift 2 中的一个 OptionSetType。它提供了一个类似集合的接口(interface),可以从数组中初始化字面意思。

因此有效的选项是例如:

base64EncodedStringWithOptions([]) // no options
base64EncodedStringWithOptions([.Encoding64CharacterLineLength])
base64EncodedStringWithOptions([.Encoding64CharacterLineLength, .EncodingEndLineWithCarriageReturn])

完整示例:

let apiLoginString = NSString(format: "%@:%@", "user", "password")
let apiLoginData = apiLoginString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64ApiLoginString = apiLoginData.base64EncodedStringWithOptions([])

print(base64ApiLoginString)
// dXNlcjpwYXNzd29yZA==

关于ios - Swift 2 base64 编码产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32499648/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com