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

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打印出不同的结果..什么F!

更新3:结果如马丁所指出的,我在我的API_USERNAMEvariables中有一些不可见的字符

 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日历组件错误或Swift 2.0 – 二进制运算符“|” 不能应用于两个UIUserNotificationType操作数 ,
NSDataBase64EncodingOptions是Swift 2中的一个OptionSetType 。它提供了一个类似于set的接口,并且可以从一个数组文本初始化。

所以有效的select是例如:

 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==