go []byte 中文乱码
时间: 2023-09-13 08:06:00 浏览: 46
当将中文字符存储到 []byte 变量中时,需要将字符转换为其对应的 UTF-8 编码。如果没有正确地进行编码,可能会导致中文字符在 []byte 变量中出现乱码。
一种常见的解决方法是使用 Go 语言标准库中的 "unicode/utf8" 包来进行字符编码和解码。具体来说,可以使用 "utf8.RuneCountInString" 函数获取字符串中 Unicode 字符的个数,再使用 "utf8.EncodeRune" 函数将每个字符编码为 UTF-8 字节序列。此外,还可以使用 "utf8.DecodeRune" 函数将 UTF-8 字节序列解码为 Unicode 字符。
下面是一个示例代码,它将一个包含中文字符的字符串编码为 []byte 变量:
```
import "unicode/utf8"
func encodeString(s string) []byte {
buf := make([]byte, 0, 3*len(s))
for _, r := range s {
if r < utf8.RuneSelf {
buf = append(buf, byte(r))
} else {
b := make([]byte, utf8.UTFMax)
n := utf8.EncodeRune(b, r)
buf = append(buf, b[:n]...)
}
}
return buf
}
```
注意,如果要将 []byte 变量中的 UTF-8 编码的字节序列解码为字符串,可以使用 "utf8.DecodeRune" 函数和 "string" 类型的强制转换。例如:
```
import "unicode/utf8"
func decodeBytes(b []byte) string {
s := ""
for len(b) > 0 {
r, size := utf8.DecodeRune(b)
s += string(r)
b = b[size:]
}
return s
}
```