如何从字符串到字节的转换中获得正确的值?

我需要将字符串转换为字节切片,我使用函数,但是当字符串具有字母ñ或带有重音符号的某个字母时,我得到的值与预期不同。[]byte(string)

fmt.Println([]byte("áéíóúñÁÉÍÓÚÑ"))

预期结果:[ 160 130 161 162 163 181 144 214 224 233 ]

获得的结果:[195 161 195 169 195 173 195 179 195 186 195 177 195 129 195 137 195 141 195 147 195 154 195 145]

因此,当我将获得的值转换为字符串时,我得到而不是├í├®├¡├│├║├▒├ü├ë├ì├ô├Ü├æáéíóúñÁÉÍÓÚÑ

如何获得正确的值?


呼唤远方
浏览 99回答 2
2回答

子衿沉夜

这里有几个问题。首先,您给出以下预期结果:[ 160 130 161 162 163 181 144 214 224 233 ]但是你省略了 和 ,所以预期结果应该是:ñÑ[160 130 161 162 163 164 181 144 214 224 233 165]其次,您链接到 [1] 的这个页面说它是代码页 437,但它实际上是代码页 850。您可以看到“其他相关编码”[2]下列出了850。下面是一个工作示例 [3]:package mainimport (   "fmt"   "golang.org/x/text/encoding/charmap")func main() {   b := []byte("áéíóúñÁÉÍÓÚÑ")   c, e := charmap.CodePage850.NewEncoder().Bytes(b)   if e != nil {      panic(e)   }   fmt.Println(c)}https://theasciicode.com.arhttps://wikipedia.org/wiki/Code_page_437https://pkg.go.dev/golang.org/x/text/encoding/charmap

慕雪6442864

对于这些字符,您可以使用 ascii85 编码器/解码器。字节切片将与您的期望不匹配,但是,输出将与您的输入匹配。(我假设这是这里的关键)package mainimport (    "encoding/ascii85"     "fmt")func main() {         enc := make([]byte, 30, 30)         dec := make([]byte, 30, 30)         ascii85.Encode(enc, []byte("áéíóúñÁÉÍÓÚÑ"))         ascii85.Decode(dec, enc, false)         fmt.Println(enc)                 fmt.Println(string(dec)) }https://golang.org/pkg/encoding/ascii85/https://play.golang.org/p/ErBSKYVBXNg
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go