gpt4 book ai didi

swift - 为什么在 Data.base64EncodedString 中使用 endLineWithLineFeed 不会在编码字符串的末尾添加新行?

转载 作者:可可西里 更新时间:2023-11-01 01:47:40 25 4
gpt4 key购买 nike

我希望 swift 代码具有与以下 Java Android 代码相同的行为

Java 安卓

byte[] binary = {1, 2, 3};
// adheres to RFC 2045
String output = Base64.encodeToString(binary, Base64.DEFAULT);
// "AQID\n"
android.util.Log.i("CHEOK", output);
// "5"
android.util.Log.i("CHEOK", "" + output.length());

swift

import Foundation

let binary: [UInt8] = [1, 2, 3]
let output = Data(binary).base64EncodedString(options: [.endLineWithLineFeed, .lineLength76Characters])
// "AQID"
print(output)
// "4"
print(output.count)

即使我使用 [.endLineWithLineFeed, .lineLength76Characters] 作为选项,新行也不会添加到编码字符串的末尾。

我可以知道我错过了什么吗?

最佳答案

正如 Rob Napier 所建议的,.endLineWithLineFeed 不是在编码字符串末尾添加新行的选项。

它指定使用单个 LineFeed 作为 End_of_Line。如您所知,许多互联网标准使用 CRLF 作为 End_of_Line,因此 base64EncodedString(options:) 使用 CRLF 而没有此选项。

let data = Data(0..<(76*3/4)*2) //Exactly two lines
let base64 = data.base64EncodedString(options: [.lineLength76Characters])
debugPrint(base64)
// \/\/
//->"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4\r\nOTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx"
let base64LF = data.base64EncodedString(options: [.endLineWithLineFeed, .lineLength76Characters])
debugPrint(base64LF)
// \/
//->"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4\nOTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx"

关于swift - 为什么在 Data.base64EncodedString 中使用 endLineWithLineFeed 不会在编码字符串的末尾添加新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56996669/

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