使用Go从连接中读取utf8编码的数据

时间:2010-08-01 17:42:40

标签: utf-8 go

我可以使用io.WriteString轻松地将字符串写入连接。

但是,我似乎无法轻易地从连接中读取字符串。我可以从连接中读取的唯一内容是字节,看起来,我必须以某种方式转换为字符串。

假设字节代表utf8编码的字符串,我该如何将它们转换为字符串形式?

(编辑:或者,我怎么能简单地从连接中读取一个字符串?)

谢谢!

2 个答案:

答案 0 :(得分:4)

可以在标准库中找到适合您目的的便捷工具:bytes.Buffersee the package docs)。

假设您有一个实现io.Reader的对象(也就是说,它有一个带有签名Read([]byte) (int, os.Error)的方法)。

一个常见的例子是os.File

f, err := os.Open("/etc/passwd", os.O_RDONLY, 0644)

如果您想将该文件的内容读入字符串,只需创建一个bytes.Buffer(其零值是一个现成的缓冲区,因此您不需要调用构造函数) :

var b bytes.Buffer

使用io.Copy将文件内容复制到缓冲区中:

n, err := io.Copy(b, f)

(使用io.Copy的替代方法是b.ReadFrom(f) - 它们或多或少相同。)

并调用缓冲区的String方法以字符串形式检索缓冲区的内容:

s := b.String()

bytes.Buffer将自动增长以存储文件内容,因此您无需担心分配和增加byte切片等。

答案 1 :(得分:2)

您只需将一片字节转换为字符串:

var foo []byte
var bar string = string(foo)

不涉及编码/解码,因为字符串只被视为字节数组。