将 base64 行拆分为块

Split a base64 line into chunks

将一行 base64 拆分为多行 76 个字符的最佳方法是什么。目前我这样使用 encoding/base64 包:

encoded := base64.StdEncoding.EncodeToString(data)

提前致谢!

标准库中不支持此功能。你得自己做一个。

一个简单的实现可以是这样的:

func split(s string, size int) []string {
    ss := make([]string, 0, len(s)/size+1)
    for len(s) > 0 {
        if len(s) < size {
            size = len(s)
        }
        ss, s = append(ss, s[:size]), s[size:]

    }
    return ss
}

这个循环直到字符串被消耗,并且在每次迭代中从头开始切割 size 个字符(字节)。

请注意,这适用于 base64 文本,因为它仅使用 1 对 1 映射到 UTF-8 编码形式字节的字符(Go 在内存中存储字符串的方式)。如果您想在任意字符串上使用它,切片可能会破坏有效的 UTF-8 序列,而且块也不一定是 size 个字符。

正在测试:

s := strings.Repeat("1", 2*76+3)
for _, chunk := range split(s, 76) {
    fmt.Println(chunk)
}

输出(在 Go Playground 上尝试):

1111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111
111