比如 '' 这个字符:
bytes := []byte{''}
fmt.Print(bytes) //输出: [129]
str := ""
fmt.Print([]byte(str)) //输出: [194 129]
为什么转换出来的结果不一样了, 这导致我后端收到前端的数据不一致, 怎么才能保证转换出来的结果一样啊?
比如 '' 这个字符:
bytes := []byte{''}
fmt.Print(bytes) //输出: [129]
str := ""
fmt.Print([]byte(str)) //输出: [194 129]
为什么转换出来的结果不一样了, 这导致我后端收到前端的数据不一致, 怎么才能保证转换出来的结果一样啊?
在Go语言里面 []byte是不可比较的,string是可以比较的。
string转[]byte你的用法没错,直接使用string对比就行。
额外提示下: ASCII码值小于128的情况下,从string转[]byte和直接定义,打印结果是一致的,你这个符号不行。
10 回答11.2k 阅读
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
呀, 又看到这个问题了, 那知乎上提问的也是同一个人了。
下面为部分分析,完整内容请参考原文
go中的字符串存储的是utf8编码的字节切片,而''的utf8编码就是[194 129]。
所以这个转换结果是符合预期的,如果要保证转换的结果一样就转为rune切片,rune切片保存的是字符串中每个字符的unicode