Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Utf 8 使用Go从连接读取utf8编码的数据_Utf 8_Go - Fatal编程技术网

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

Utf 8 使用Go从连接读取utf8编码的数据,utf-8,go,Utf 8,Go,我可以使用io.WriteString轻松地将字符串写入连接 然而,我似乎无法轻松地从连接中读取字符串。我能从连接中读取的唯一内容是字节,看起来,我必须以某种方式将其转换为字符串 假设字节表示utf8编码的字符串,我将如何将它们转换为字符串形式 (编辑:或者,我如何从连接读取字符串?) 谢谢 您可以将字节片段强制转换为字符串: var foo []byte var bar string = string(foo) s := b.String() 不需要编码/解码,因为字符串仅被视为字节数组。

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

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

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

(编辑:或者,我如何从连接读取字符串?)


谢谢

您可以将字节片段强制转换为字符串:

var foo []byte
var bar string = string(foo)
s := b.String()

不需要编码/解码,因为字符串仅被视为字节数组。

您可以将字节片段转换为字符串:

var foo []byte
var bar string = string(foo)
s := b.String()

不需要编码/解码,因为字符串只是作为字节数组处理。

在标准库中可以找到一个适合您使用的方便工具:
字节。缓冲区
()

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

一个常见的例子是
os.File

f, err := os.Open("/etc/passwd", os.O_RDONLY, 0644)
如果要将该文件的内容读入字符串,只需创建一个
bytes.Buffer
(它的零值是一个随时可用的缓冲区,因此不需要调用构造函数):

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

n, err := io.Copy(b, f)
(使用
io.Copy
的替代方法是
b.ReadFrom(f)
——它们大致相同。)

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

var foo []byte
var bar string = string(foo)
s := b.String()

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

可以在标准库中找到一个适合您的方便工具:
bytes.Buffer
()

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

一个常见的例子是
os.File

f, err := os.Open("/etc/passwd", os.O_RDONLY, 0644)
如果要将该文件的内容读入字符串,只需创建一个
bytes.Buffer
(它的零值是一个随时可用的缓冲区,因此不需要调用构造函数):

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

n, err := io.Copy(b, f)
(使用
io.Copy
的替代方法是
b.ReadFrom(f)
——它们大致相同。)

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

var foo []byte
var bar string = string(foo)
s := b.String()

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

这不是100%正确,尽管足够接近。字符串的处理方式不同于字节数组。只是好奇,当到达字符串结尾(或字符结尾)时,如何检查?或者我可以一个字符一个字符地读取(使用cast)来从连接中构建字符串吗?这不是100%正确,尽管已经足够接近了。字符串的处理方式不同于字节数组。只是好奇,当到达字符串结尾(或字符结尾)时,如何检查?或者我可以逐字符读取(使用cast)以从连接构建字符串吗?