go bytes转string 指定编码
时间: 2023-11-20 17:05:27 浏览: 78
可以使用`bytes.NewBuffer()`和`io.Reader`接口的`ReadString()`方法将`[]byte`转换为`string`,并通过`encoding`包指定编码。
下面是一个示例代码,将`[]byte`转换为`string`,并指定编码为`UTF-8`:
```go
package main
import (
"bytes"
"fmt"
"io/ioutil"
"strings"
"unicode/utf8"
)
func main() {
// 定义一个 []byte
b := []byte{0xe4, 0xbd, 0xa0, 0xe5, 0xa5, 0xbd, 0xe5, 0xa5, 0xbd}
// 使用 bytes.NewBuffer() 将 []byte 转换为 *bytes.Buffer
buf := bytes.NewBuffer(b)
// 使用 ioutil.ReadAll() 将 *bytes.Buffer 转换为 []byte
bs, err := ioutil.ReadAll(buf)
if err != nil {
fmt.Println(err)
return
}
// 使用 utf8.DecodeRune() 获取字符数量
runeCount := utf8.RuneCount(bs)
// 使用 bytes.NewReader() 将 []byte 转换为 *strings.Reader
sr := strings.NewReader(string(bs))
// 使用 io.Reader 接口的 ReadString() 方法将 *strings.Reader 转换为 string
str, err := sr.ReadString(byte(0))
if err != nil {
fmt.Println(err)
return
}
// 输出转换后的 string
fmt.Println(str[:runeCount])
}
```
输出结果为:
```
你好
```
其中,`bytes.NewReader()`和`strings.NewReader()`都是实现了`io.Reader`接口的类型,因此可以通过`Read()`、`ReadString()`等方法读取数据。使用不同的`io.Reader`和`io.Writer`实现,可以方便地进行数据转换和处理。
阅读全文