Go和TypeScript之间的区别是什么?还有关于Base64编码的问题。

huangapple go评论81阅读模式
英文:

Go and typescript difference base64 encoding problem

问题

type script:

Buffer.from('Мегафон').toString('base64') //0JzQtdCz0LDRhNC+0L0=

go:

decode, err := base64.URLEncoding.DecodeString("0JzQtdCz0LDRhNC+0L0=") //err : 输入字节15处有非法的base64数据

如果我尝试:

base64.URLEncoding.EncodeToString([]byte("Мегафон")) //0JzQtdCz0LDRhNC-0L0=

也就是说,唯一的区别在于+和-。

我通过以下方式使其工作:
v = strings.ReplaceAll(v, "+", "-")
但这显然不是一个解决方案。

英文:

type script:

Buffer.from('Мегафон').toString('base64') //0JzQtdCz0LDRhNC+0L0=

go:

decode, err := base64.URLEncoding.DecodeString("0JzQtdCz0LDRhNC+0L0=")
//err : illegal base64 data at input byte 15

if i try:

base64.URLEncoding.EncodeToString([]byte("Мегафон")) //0JzQtdCz0LDRhNC-0L0=

That is, the difference is only in + and -.

I made it work with
v = strings.ReplaceAll(v, "+", "-")
but this is clearly not a solution.

答案1

得分: 2

你正在比较“标准”的base64编码和URL安全的base64编码。在Go中使用普通的base64编码时,不要使用base64.URLEncoding.DecodeString,而是使用base64.StdEncoding.DecodeString

英文:

You are comparing "standard" base64 encoding with URL-safe base64 encoding. To use normal base64 encoding in Go don't use base64.URLEncoding.DecodeString but instead base64.StdEncoding.DecodeString.

答案2

得分: 0

你使用标准的base64编码对字符串进行了编码,并使用url-safe解码器进行解码。请查看base64.go文件。

// StdEncoding是标准的base64编码,根据RFC 4648定义。
var StdEncoding = NewEncoding(encodeStd)

// URLEncoding是在RFC 4648中定义的替代base64编码。
// 它通常用于URL和文件名。
var URLEncoding = NewEncoding(encodeURL)

这将起作用。

base64.StdEncoding.DecodeString("0JzQtdCz0LDRhNC+0L0=")

如果你想要对字符串进行url安全编码,请使用base64url而不是base64。然后你可以使用base64.URLEncoding解码字符串。

Buffer.from('Мегафон').toString('base64url'); //'0JzQtdCz0LDRhNC-0L0'
英文:

You encoded your string with standard base64 encoding, and decoded with url-safe decoder. Check out base64.go

// StdEncoding is the standard base64 encoding, as defined in
// RFC 4648.
var StdEncoding = NewEncoding(encodeStd)

// URLEncoding is the alternate base64 encoding defined in RFC 4648.
// It is typically used in URLs and file names.
var URLEncoding = NewEncoding(encodeURL)

This will works.

base64.StdEncoding.DecodeString("0JzQtdCz0LDRhNC+0L0=")

If you want to encode your string url-safely, use base64url instead of base64. Then you can decode the string with base64.URLEncoding.

 Buffer.from('Мегафон').toString('base64url'); //'0JzQtdCz0LDRhNC-0L0'

huangapple
  • 本文由 发表于 2022年11月23日 17:16:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/74544300.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定