为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
呼唤远方 2022-08-24 11:22:03
我需要将字符串转换为字节切片,我使用函数,但是当字符串具有字母ñ或带有重音符号的某个字母时,我得到的值与预期不同。[]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]因此,当我将获得的值转换为字符串时,我得到而不是├í├®├¡├│├║├▒├ü├ë├ì├ô├Ü├æáéíóúñÁÉÍÓÚÑ如何获得正确的值?
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞


这里有几个问题。首先,您给出以下预期结果:


[ 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 main


import (

   "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)

}

  1. https://theasciicode.com.ar

  2. https://wikipedia.org/wiki/Code_page_437

  3. https://pkg.go.dev/golang.org/x/text/encoding/charmap


查看完整回答
反对 回复 2022-08-24
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

对于这些字符,您可以使用 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


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信