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;
我正在尝试使用我的 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;