为了账号安全,请及时绑定邮箱和手机立即绑定

golang base64编码vs nodejs缓冲区base64编码

golang base64编码vs nodejs缓冲区base64编码

Go
富国沪深 2021-04-02 18:15:10
我正在使用base64在node中编码的软件,如下所示:const enc = new Buffer('test', 'base64')console.log(enc) 显示:<Buffer b5 eb 2d>我正在编写需要与此互操作的golang服务。但是我无法在go中重现以上结果。package mainimport (    "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源,但是经过一会儿的搜索后,决定在这里发布可能会更快,希望有人能立即获得答案。
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

此构造函数:


new Buffer('test', 'base64')

test使用base64编码对输入字符串进行解码。它不对test使用base64进行编码。请参阅参考资料:


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中进行编码,请使用(有关详细信息,请参见如何在node.js中进行Base64编码?):


Buffer.from("test").toString('base64')


查看完整回答
反对 回复 2021-04-19
  • 1 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信