【发布时间】:2018-11-01 10:53:49
【问题描述】:
我必须用 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
【问题讨论】:
-
您的 base64 编码字符串错误:play.golang.org/p/F8yG_0dyvun。编码字符串
w5puaWNhOlPDrTp7W8O2w7FdfTpJbnZpdGFjacOzbg==正确解码为Única:Sí:{[öñ]}:Invitación -
源字符串采用8859-1 或Windows-1252 编码,而不是程序所期望的UTF-8。使用x/net/encoding 将字符串转换为UTF-8
-
也许你是对的,但是字符串是浏览器发送的: atob("2m5pY2E6U+06e1v28V19Okludml0YWNp824=") btoa("Única:Sí:{[öñ]}:Invitación ") 还有其他想法吗?
-
#ThunderCat 有权利。我只是改变了这条线,一切正常。谢谢:dec := charmap.ISO8859_1.NewDecoder()
标签: go base64 special-characters accent-sensitive