将base64行拆分为块

时间:2017-07-31 09:28:25

标签: string go encoding base64

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

encoded := base64.StdEncoding.EncodeToString(data)

提前谢谢!

1 个答案:

答案 0 :(得分:2)

标准库中没有对此的支持。你必须自己制作一个。

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

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文本,因为它只使用以UTF-8编码形式将1对1映射到字节的字符(这是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