golang 特殊字符的string怎么转成[]byte?

比如 '' 这个字符:

    bytes := []byte{''}
    fmt.Print(bytes)      //输出: [129]
    
    str := ""
    fmt.Print([]byte(str))  //输出: [194 129]

为什么转换出来的结果不一样了, 这导致我后端收到前端的数据不一致, 怎么才能保证转换出来的结果一样啊?

阅读 5.4k
4 个回答

呀, 又看到这个问题了, 那知乎上提问的也是同一个人了。

下面为部分分析,完整内容请参考原文

go中的字符串存储的是utf8编码的字节切片,而''的utf8编码就是[194 129]。

所以这个转换结果是符合预期的,如果要保证转换的结果一样就转为rune切片,rune切片保存的是字符串中每个字符的unicode

在Go语言里面 []byte是不可比较的,string是可以比较的。

string转[]byte你的用法没错,直接使用string对比就行。

额外提示下: ASCII码值小于128的情况下,从string转[]byte和直接定义,打印结果是一致的,你这个符号不行。

bytes := []byte{''}

这个实际是把一个 rune 转换成了一个 byte ,然后再组成 []byte 。表示不了就截断了。
所以就不要用了。

前者源是字符,后者是字符串转为字节类型自然不同

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题