[英]How to decode base64 string and get the correct characters including the accents?
我必须使用golang解码一个包含西班牙语单词,重音和特殊字符的字符串。 但是我尝试过的方法不起作用。 您能否指导我走正确的道路,以获得我所需要的东西。 提前致谢。 这是我当前的代码:
import (
"encoding/base64"
"fmt"
"golang.org/x/text/encoding/unicode"
)
var authStr = "2m5pY2E6U+06e1v28V19Okludml0YWNp824="
arB, _ := base64.StdEncoding.DecodeString(authStr)
fmt.Println("De arB se obtuvo: ")
fmt.Println(string(arB))
// got-> �nica:S�:{[��]}:Invitaci�n
// expected-> Única:Sí:{[öñ]}:Invitación
dec := unicode.UTF8.NewDecoder()
arButf8 := make([]byte, len(arB)*2)
if n, _, err := dec.Transform(arButf8, []byte(arB), true); err != nil {
fmt.Println("Error: ", err)
} else {
arButf8 = arButf8[:n]
fmt.Println("De authStr se obtuvo: ")
fmt.Println(string(arButf8))
// got-> �nica:S�:{[��]}:Invitaci�n
// expected-> Única:Sí:{[öñ]}:Invitación
}
// If do with Javascript atob("2m5pY2E6U+06e1v28V19Okludml0YWNp824=") works fine
这是正确的代码:
import (
"encoding/base64"
"fmt"
"golang.org/x/text/encoding/charmap"
)
var authStr = "2m5pY2E6U+06e1v28V19Okludml0YWNp824="
arB, _ := base64.StdEncoding.DecodeString(authStr)
fmt.Println("De arB se obtuvo: ")
fmt.Println(string(arB))
dec := charmap.ISO8859_1.NewDecoder()
arBdest := make([]byte, len(arB)*2)
if n, _, err := dec.Transform(arBdest, []byte(arB), true); err != nil {
fmt.Println("Error: ", err)
} else {
arBdest = arBdest[:n]
fmt.Println("De authStr se obtuvo: ")
fmt.Println(string(arBdest))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.