Чтение данных в кодировке utf8 из соединения с использованием Go - PullRequest
0 голосов
/ 01 августа 2010

Я легко могу записать строку в соединение, используя io.WriteString.

Однако я не могу легко прочитать строку из соединения.Единственное, что я могу прочитать из соединения, - это байты, которые, кажется, мне нужно каким-то образом преобразовать в строку.

Предполагая, что байты представляют строку в кодировке utf8, как бы я преобразовал их в строковую форму??

(Изменить: в качестве альтернативы, как я могу просто прочитать строку из соединения?)

Спасибо!

Ответы [ 2 ]

4 голосов
/ 13 августа 2010

Удобный инструмент, который будет соответствовать вашим целям, можно найти в стандартной библиотеке: bytes.Buffer ( см. Пакет документов ).

Скажем, у вас есть объект, который реализует 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 фрагментов и т. Д.

2 голосов
/ 01 августа 2010

Вы можете просто преобразовать фрагмент байта в строку:

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

Кодирование / декодирование не требуется, поскольку строки просто обрабатываются как массивы байтов.

...