英文:
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'
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论