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

时间:2018-08-01 06:20:12

标签: node.js string go encoding base64

我正在使用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>

1 个答案:

答案 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')