2017-07-31 279 views
1

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

encoded := base64.StdEncoding.EncodeToString(data) 

提前致谢!

+0

环路和切片操作'[0:76]' – zerkms

回答

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编码形式(这是Go如何将字符串存储在内存中)映射1对1字节的字符。如果你想在任意字符串上使用它,切片可能破坏有效的UTF-8序列,并且块也不一定是size个字符。

测试它:

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

输出(尝试在Go Playground):

1111111111111111111111111111111111111111111111111111111111111111111111111111 
1111111111111111111111111111111111111111111111111111111111111111111111111111 
111