这是我的代码,我不明白为什么解码功能不起作用.
请不要太了解.
func EncodeB64(message string) (retour string) {
base64Text := make([]byte, base64.StdEncoding.EncodedLen(len(message)))
base64.StdEncoding.Encode(base64Text, []byte(message))
return string(base64Text)
}
func DecodeB64(message string) (retour string) {
base64Text := make([]byte, base64.StdEncoding.DecodedLen(len(message)))
base64.StdEncoding.Decode(base64Text, []byte(message))
fmt.Printf("base64: %s\n", base64Text)
return string(base64Text)
}
Run Code Online (Sandbox Code Playgroud)
它让我:[解码错误 - 输出不是utf-8] [解码错误 - 输出不是utf-8]
Den*_*ret 19
DecodedLen返回最大长度.
此长度对于调整缓冲区大小非常有用,但缓冲区的一部分将不会被写入,因此无效UTF-8.
您只需使用Decode函数返回的实际写入长度.
l, _ := base64.StdEncoding.Decode(base64Text, []byte(message))
log.Printf("base64: %s\n", base64Text[:l])
Run Code Online (Sandbox Code Playgroud)
zzz*_*zzz 18
len前缀是肤浅的,导致无效的utf-8错误:
package main
import (
"encoding/base64"
"fmt"
"log"
)
func main() {
str := base64.StdEncoding.EncodeToString([]byte("Hello, playground"))
fmt.Println(str)
data, err := base64.StdEncoding.DecodeString(str)
if err != nil {
log.Fatal("error:", err)
}
fmt.Printf("%q\n", data)
}
Run Code Online (Sandbox Code Playgroud)
(还在这里)
产量
SGVsbG8sIHBsYXlncm91bmQ=
"Hello, playground"
Run Code Online (Sandbox Code Playgroud)
编辑:我读得太快,len没有被用作前缀.dystroy做对了.
总结另外两篇文章,这里有两个用Go编码/解码Base64字符串的简单函数:
// Dont forget to import "encoding/base64"!
func base64Encode(str string) string {
return base64.StdEncoding.EncodeToString([]byte(str))
}
func base64Decode(str string) (string, bool) {
data, err := base64.StdEncoding.DecodeString(str)
if err != nil {
return "", true
}
return string(data), false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30815 次 |
| 最近记录: |