Go和typescript差异base64编码问题

olqngx59  于 2022-11-26  发布在  TypeScript
关注(0)|答案(2)|浏览(223)

键入脚本:
Buffer.from('Мегафон').toString('base64') //0JzQtdCz0LDRhNC+0L0=
开始:
decode, err := base64.URLEncoding.DecodeString("0JzQtdCz0LDRhNC+0L0=") //err : illegal base64 data at input byte 15
如果我尝试:
base64.URLEncoding.EncodeToString([]byte("Мегафон")) //0JzQtdCz0LDRhNC-0L0=
也就是说,区别仅在于+和-。
我让它与v = strings.ReplaceAll(v, "+", "-")一起工作,但这显然不是一个解决方案。

m4pnthwp

m4pnthwp1#

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

b4lqfgs4

b4lqfgs42#

您使用标准base64编码对字符串进行了编码,并使用url-safe解码器进行了解码。

// 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)

这会有用的。

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

如果你想安全地编码你的字符串url,使用base64url而不是base64,然后你可以用base64.URLEncoding来解码这个字符串。

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

相关问题