我将Objective-C转换为Swift,并遇到了将Apple App Store收据NSData转换为base64编码字符串的代码。
代码使用的是https://github.com/stackmob/stackmob-ios-sdk/blob/master/Utility/Base64EncodedStringFromData.m中的函数 Base64EncodedStringFromData
从标题为Base64 Encoding/Decoding with Swift 2的stackoverflow帖子中,我看到了如何编码NSData。
let base64String = imageData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
但是,如果我希望结果与Base64EncodedStringFromData函数相同,我想应该改为执行以下操作:
let base64String = transactionReceipt.base64EncodedStringWithOptions([])
是“Base64EncodedStringFromData” 和transactionReceipt。 base64EncodedStringWithOptions([])等效?我计划进行实验。但是,我想确保概念正确。
最佳答案
这两个相等吗? -答案是否定的,但这取决于您字符串的长度。
如果您查看Apple documentation,它会明确指出,如果您未指定行长,则编码将为回车+换行。
另外,我还编写了一个小测试,因为我也在使用base64编码。
let someShortString = "someShortString"
let encodedShortString = someShortString.dataUsingEncoding(NSUTF8StringEncoding)!
let someLongString = "someLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongStringsomeLongString"
let encodedLongString = someLongString.dataUsingEncoding(NSUTF8StringEncoding)!
let base64ShortStringWithoutParameters = encodedShortString.base64EncodedStringWithOptions([])
let base64ShortStringWithParameters = encodedShortString.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
let base64LongStringWithoutParameters = encodedLongString.base64EncodedStringWithOptions([])
let base64LongStringWithParameters = encodedLongString.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
base64ShortStringWithoutParameters == base64ShortStringWithParameters ? print("same") : print("not same")
base64LongStringWithoutParameters == base64LongStringWithParameters ? print("same") : print("not same")
它将为第一个语句打印“相同”,为第二个语句打印“不相同”。
因此,总而言之,如果您的字符串长于某个长度(可能是64个字符,但我不确定),则它们将不相同。将在转换后的字符串中插入“\ r \ n”。