首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Base64.DEFAULT是否将linefeed添加到编码字符串的末尾,而不管字符串长度如何,这是行业标准吗?

Base64.DEFAULT是否将linefeed添加到编码字符串的末尾,而不管字符串长度如何,这是行业标准吗?
EN

Stack Overflow用户
提问于 2019-07-12 04:57:35
回答 1查看 185关注 0票数 2

根据https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/util/Base64.java

传递{@code默认}将导致符合RFC 2045的输出。

我认为通过使用Base64.DEFAULT,我可以实现一个标准的编码行为,这可以很容易地在其他平台上找到。

Java Android

代码语言:javascript
复制
    byte[] binary = new byte[80];
    String output = Base64.encodeToString(binary, Base64.DEFAULT);
    android.util.Log.i("CHEOK", unEscapeString(output));

    binary = new byte[8];
    output = Base64.encodeToString(binary, Base64.DEFAULT);
    android.util.Log.i("CHEOK", unEscapeString(output));

public static String unEscapeString(String s){
    StringBuilder sb = new StringBuilder();
    for (int i=0; i<s.length(); i++)
        switch (s.charAt(i)){
            case '\n': sb.append("\\n"); break;
            case '\t': sb.append("\\t"); break;
            case '\r': sb.append("\\r"); break;
            default: sb.append(s.charAt(i));
        }
    return "\"" + sb.toString() + "\"";
}

我将从Android获得以下输出。

代码语言:javascript
复制
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\n"
"AAAAAAAAAAA=\n"

似乎对Base64.DEFAULT来说,它有其行为

  1. 在第76个字符之后添加行提要('\n')。
  2. 在编码字符串的末尾添加行提要('\n')。

因此,我的iOS应用程序需要从安卓应用程序中交换数据。我注意到我可以模拟第一个行为(在第76个字符之后添加行提要('\n') )。

但是,不是第二种行为(在编码字符串的末尾添加行提要('\n') )

Swift iOS

代码语言:javascript
复制
import Foundation

var data = Data(count: 80)
var base64 = data.base64EncodedString(options: [.endLineWithLineFeed, .lineLength76Characters])
debugPrint(base64)

data = Data(count: 8)
base64 = data.base64EncodedString(options: [.endLineWithLineFeed, .lineLength76Characters])
debugPrint(base64)

我从Swift iOS获得以下输出。

代码语言:javascript
复制
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
"AAAAAAAAAAA="

这让我觉得,不管字符串长度如何,在编码字符串的末尾添加linefeed是一个行业标准吗?我如何在不同的平台上实现这种行为?

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 19:41:20

事实证明,Android的默认base64编码会在每行第76个字符之后自动插入换行/行提要。

您可以使用Android的Base64.NODE_WRAP模式禁用此“功能”。例如:Base64.encodeToString(binary, Base64.NO_WRAP);

这一切为什么要发生?似乎没有人确切地知道,但这很可能是一种将二进制文件编码到电子邮件或usenet样式的内容中的方法,这些内容通常是在纯文本时代为80字符的宽度监视器格式化的。

有关这方面的一些提示,请参见base64

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57000417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档