Golang 字符串转 []byte 为何有时结果不同?

Golang 字符串转 []byte 为何有时结果不同?

golang 字符串转 []byte 为何不同?

当使用 []byte(str) 将字符串转换为字节切片时,结果可能与直接声明字节切片不同。

举个例子, 字符 'xa0'(空格字符)在转换为字节切片后,输出的是 [194 129],而直接声明字节切片 [129] 的话,输出的却是 [129]。

这是因为:

  • go 中的字符串存储的是 UTF-8 编码的字节切片。
  • 字符 'xa0' 的 UTF-8 编码是 [194 129],代表一个宽度为 2 个字节的字符。

因此,当使用 []byte(str) 转换为字节切片时,会直接输出字符的 UTF-8 编码。

而直接声明字节切片,意味着指定了固定长度,此时 go 会根据长度将字节填充到切片中。如果长度不匹配字符的 UTF-8 编码宽度,就会导致结果不同。

要保证转换结果一致,可以使用 []rune(str) 将字符串转换为 rune 切片。rune 切片存储的是字符串中每个字符的 Unicode 码点,不会受到 UTF-8 编码的影响。

以上就是Golang 字符串转 []byte 为何有时结果不同?的详细内容,更多请关注其它相关文章!