我正在使用base64在node中编码如下的软件:
const enc = new Buffer('test', 'base64')
console.log(enc)
显示:
<Buffer b5 eb 2d>
我正在编写需要与此互操作的golang服务。但是我无法在go中重现以上结果。
package main
import (
"fmt"
b64 "encoding/base64"
)
func main() {
// Attempt 1
res := []byte(b64.URLEncoding.EncodeToString([]byte("test")))
fmt.Println(res)
// Attempt 2
buf := make([]byte, 8)
b64.URLEncoding.Encode(buf, []byte("test"))
fmt.Println(buf)
}
上面的照片:
[100 71 86 122 100 65 61 61]
[100 71 86 122 100 65 61 61]
两者均与节点的输出完全不同。我怀疑不同之处在于节点将字符串存储为base64字符串中的字节,而go将字符串存储为ascii / utf8字符串中表示为base64的字节。但是还没有弄清楚节点如何做!
我略过了go的编码源,然后尝试为Buffer找到Node的源,但是经过一会儿的搜索后,决定在这里发布它可能会更快,希望有人能立即得到答案。 / p>
答案 0 :(得分:2)
此构造函数:
new Buffer('test', 'base64')
使用test
编码对输入字符串base64
进行解码。它不使用base64编码test
。参见reference:
new Buffer(string[, encoding])
string
要编码的字符串。encoding
的编码string
。 默认:'utf8'
。
等效的Go代码为:
data, err := base64.StdEncoding.DecodeString("test")
if err != nil {
panic(err)
}
fmt.Printf("% x", data)
哪个输出(在Go Playground上尝试):
b5 eb 2d
要在Node.js中进行编码,请使用(有关详细信息,请参见How to do Base64 encoding in node.js?):
Buffer.from("test").toString('base64')