我需要将字符串转换为字节切片,我使用函数,但是当字符串具有字母ñ或带有重音符号的某个字母时,我得到的值与预期不同。[]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)
}
慕雪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
- 2 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消