Swift base64 字符串解码后无法识别 /n 换行符

Swift won't recognize /n line breaks after base64 string decoding

我正在尝试使用我的 base64 解码字符串并打印它,但结果无法识别换行符。例如,

print("Hi \n hello \n hi")

这样打印

Hi
hello
hi

正如预期的那样,但是当我解码字符串的编码版本并打印结果时,它 returns 识别了没有换行符的字符串。这是我的代码。

var encodedString = "SGkgXG4gaGVsbG8gXG4gaGk="

let decodedData = NSData(base64EncodedString: encodedString, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters),
        decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding)

print (decodedString!)
 // prints "Hi \n hello \n hi"

如何更改我的代码以允许 Swift 识别这些换行符?谢谢!

你的字符串编码不正确,当你解码它时,我在操场上检查了你的字符串 encodedString decodedString 包含这样的字符串 Hi \n hello \n hi,它正在转义 \n 这就是为什么它用输出打印 \n 的原因。尝试像这样正确编码字符串。

var str = "Hi \n hello \n hi"
let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding)
if let base64Encoded = utf8str?.base64EncodedStringWithOptions([])
{
    let decodedData = NSData(base64EncodedString: base64Encoded, options: []),
    decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding)
    print (decodedString!)
}

编辑: 问题是字符串在 PHP 中编码,而您在应用程序中使用 swift 解码。您的解码字符串包含 \n 而不是 \n 意味着它正在转义 \n 字符,一种解决方法是 replace \n\n 但它不是可取的,但不是这样它会像这样为你工作。

var str = decodedString!.stringByReplacingOccurrencesOfString("\n", withString: "\n")
print (str)

注意: 如果你encode/decode 都在同一侧,则表示在你的PHP 或应用程序侧 swift ].

我不熟悉 swift,但我在 objective-c 中尝试并得到了正确的结果。您可以将代码转换为 swift...

NSString *str = @"Hi \n hello \n hi";
NSLog(@"Original Str value: %@", str);

// Encoding the string value
NSData *encodeData = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [encodeData base64EncodedStringWithOptions:0];
NSLog(@"Encode String Value: %@", base64String);

// Decoding the encoded string value
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
NSLog(@"Decode String Value: %@", decodedString);

输出:

编码愉快...

Base64.DEFAULT;  //Include \n
Base64.NO_WRAP;   //Not included \n

这个参数可能也在Swift中找到,但我的解决方案是完全使用Base64.NO_ WRAP;