Чтение данных не в формате utf8 из сетевого вызова в golang - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь прочитать байты из тела ответа http в golang. Моя проблема в том, что тело ответа кодируется с использованием ISO-8859-1. Я хочу прочитать тело ответа в той же кодировке и записать содержимое в файл в кодировке ISO-8859-1.

Есть ли способ, с помощью которого я могу выполнить sh это? Я вообще не хочу конвертировать данные в UTF-8.

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Здесь - хорошее прочтение о кодировании, которое может вам пригодиться.

Вы, по-видимому, предполагаете, что Go декодирует необработанные байты, которые он получает при выполнении запроса. Это не.

Возьмите этот пример:

package main

import (
    "io"
    "log"
    "net/http"
    "os"
)

func main() {
    // We perform a request to a Latin-1 encoded page
    resp, err := http.Get("http://andrew.triumf.ca/multilingual/samples/german.meta.html")
    if err != nil {
        log.Fatalln(err)
    }
    //     
    f, err := os.Create("/tmp/latin1")
    defer f.Close()
    if err != nil {
        log.Fatalln(err)
    }
    io.Copy(f, resp.Body)
}

В документации вы можете прочитать, что resp.Body соответствует интерфейсу io.ReadCloser, который позволяет вам читать необработанные байты и передавать их в поток файл.

Как только мы запустим этот код, это будет вывод file -i /tmp/latin1:

/tmp/latin1: text/html; charset=iso-8859-1
0 голосов
/ 11 января 2020

Чтение и запись тела ответа в виде фрагмента байтов, []byte, непрозрачный тип данных.

...