2016-03-08 4 views
1

Я делаю http-запросы, используя Go.Кодирование Go и UTF-8 - Автоматическое преобразование?

request, err := http.NewRequest("GET", url, nil) 

Этот запрос, в случае успеха, возвращает ответ.

response, err := client.Do(request) 

После получения ответа я хочу сохранить содержимое.

content, err := ioutil.ReadAll(response.Body) 
ioutil.WriteFile(destination, content, 0644) 

Я просмотрел заголовки ответов.

response.Header.Get("Content-Type") 

Я видел, что большинство уже закодировано в кодировке UTF-8, что хорошо. Но есть некоторые, которые имеют разные кодировки. Я знаю, что Go имеет встроенную поддержку Unicode. Означает ли это, что если я напишу, например, содержимое страницы с большим размером 5, она будет автоматически преобразована в utf-8? Или мне нужно вручную декодировать, используя кодировку большого размера и перекодировать с помощью utf-8?

В принципе, я хочу, чтобы все, что написано, было закодировано в utf-8. Каков наилучший способ достичь этого?

Спасибо!

+0

Связанный/возможный дубликат [Перейти к вопросу о преобразовании кодирования] (http://stackoverflow.com/questions/31651410/go-encoding-transform-issue) – icza

ответ

1

ioutil.ReadAll прочитает будет с ioutil.WriteFile без каких-либо преобразований.

Если вы хотите принудительно закодировать UTF-8, вам придется самостоятельно выполнить де-кодирование, например. с помощью golang.org/x/text/encoding{,/charmap} и/или пакетов unicode/utf{8,16}.

Будьте готовы ко всем видам уродства и боли.

+0

«Будьте готовы ко всем видам уродства и боли. " Да ... Я надеялся избежать этого с Go. Мне пришлось иметь дело с этим в Python ... Никогда больше. В любом случае, спасибо за ответ. – RandomGuyqwert

+0

В качестве мата, содержащегося в http://stackoverflow.com/questions/31651410/go-encoding-transform-issue, некоторые боли могут быть устранены golang.org/x/net/html/charset. – Volker

Смежные вопросы