Go 如何解码base64字符串并获得正确的字符(包括重音)?
我必须用golang解码包含西班牙语单词的字符串,带有重音和特殊字符。但我所尝试的并不奏效。你能指引我走上正确的道路,得到我需要的东西吗。提前谢谢。这是我当前的代码:Go 如何解码base64字符串并获得正确的字符(包括重音)?,go,base64,special-characters,accent-sensitive,Go,Base64,Special Characters,Accent Sensitive,我必须用golang解码包含西班牙语单词的字符串,带有重音和特殊字符。但我所尝试的并不奏效。你能指引我走上正确的道路,得到我需要的东西吗。提前谢谢。这是我当前的代码: import ( "encoding/base64" "fmt" "golang.org/x/text/encoding/unicode" ) var authStr = "2m5pY2E6U+06e1v28V19Okludml0YWNp824=" arB, _ := base64.St
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))
}
您的base64编码字符串错误:。编码字符串
w5puaWNhOlPDrTp7W8O2w7FdfTpJbnZpdGFjacOzbg=
正确解码为Única:Sí:{[öñ]}:Invitación
源字符串处于or编码状态,而不是程序所期望的UTF-8。使用将字符串转换为UTF-8可能是正确的,但字符串与浏览器发送的字符串相同:atob(“2m5pY2E6U+06e1v28V19Okludml0YWNp824=“)btoa(“Única:Sí:{[öñ]}:Invitación”)有其他想法吗?#ThunderCat有权。我刚换了这条线,一切正常。谢谢:dec:=charmap.ISO8859_1.NewDecoder()