gpt4 book ai didi

go - 如何使用 Go 检索网页并将其转换为 UTF-8

转载 作者:IT王子 更新时间:2023-10-29 02:09:37 25 4
gpt4 key购买 nike

我需要下载一些大的 html 文件(大约 300k+)。一切正常,问题是一些文件带有 Windows-1252/ISO-8859 字符,如“á”或“ç”,当我保存文档时,Go 将其转换为像�这样的字符。有什么想法吗?

我的代码如下:

package main

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

func main() {

pagina := "http://www.mypage.com/doc?someparameters=123"
err := DownloadFile("doc.html", pagina)
if err != nil {
panic(err)
}

}

func DownloadFile(filepath string, url string) error {
out, err := os.Create(filepath)
if err != nil {
return err
}
defer out.Close()

resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()

_, err = io.Copy(out, resp.Body)
if err != nil {
return err
}

return nil
}

最佳答案

类似于:

import "golang.org/x/text/encoding/charmap"

rdrBody := charmap.Windows1252.NewDecoder().Reader(resp.Body)
_, err = io.Copy(out, rdrBody)

rdrBody := charmap.ISO8859_1.NewDecoder().Reader(resp.Body)
_, err = io.Copy(out, rdrBody)

charmap 包中还有许多其他ISO8859编码。


charmap.ISO8859_1 使用的简单示例:

package main

import (
"fmt"
"io"
"io/ioutil"
"net/http"
"strings"

"golang.org/x/text/encoding/charmap"
)

func main() {
resp, err := http.Get("http://example.com")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()

rdrBody := io.Reader(resp.Body)
contentType := strings.ToLower(resp.Header.Get("Content-Type"))
if strings.Contains(contentType, "charset=iso-8859-1") {
rdrBody = charmap.ISO8859_1.NewDecoder().Reader(rdrBody)
}
body, err := ioutil.ReadAll(rdrBody)
if err != nil {
fmt.Println(err)
return
}

n := 256
if n > len(body) {
n = len(body)
}
fmt.Println(string(body[:n]))
}

关于go - 如何使用 Go 检索网页并将其转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com