Здесь - хорошее прочтение о кодировании, которое может вам пригодиться.
Вы, по-видимому, предполагаете, что 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