代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

为什么在数据中使用endLineWithLineFeed。base64EncodedString没有在编码字符串的末尾添加新行吗?

  •  0
  • Cheok Yan Cheng  · 技术社区  · 7 年前

    我希望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());
    

    敏捷的

    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] 作为选项,新行不会添加到编码字符串的末尾。

    我能知道我错过了什么吗?

    0 回复  |  直到 7 年前
        1
  •  1
  •   OOPer    7 年前

    正如罗布·纳皮尔所说, .endLineWithLineFeed 这不是一个选择 在编码字符串的末尾添加新行 .

    它指定使用单个换行符作为换行符的结束符。正如你所知,许多互联网标准都使用CRLF作为产品线的终端 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"
    
        2
  •  0
  •   Rob Napier    7 年前

    这不是什么 .endLineWithLineFeed 做从文件中:

    设置最大行长时,请指定要插入的行尾应包含换行符。

    数据未超过最大行长度,因此不会插入行尾。