【Go语言实战】爬虫GBK编码问题处理

上一篇文章,分享了如何将字符串GBK,UTF8编码互转,确实很实用。

但是我在爬取了一篇GBK编码的文章,并将它转换成UTF8编码字符串之后,html中的 都变成了,效果非常不理想,那怎么办呢?

仍然是面向google编程(百度已经满足不了我的需求了),无意中看到了golang.org/x/html包下面有个charset.NewReader(r io.Reader, contentType string)方法,它可以将reader的内容转换成指定的编码。

// NewReader returns an io.Reader that converts the content of r to UTF-8.
// It calls DetermineEncoding to find out what r's encoding is.
func NewReader(r io.Reader, contentType string) (io.Reader, error) {
    preview := make([]byte, 1024)
    n, err := io.ReadFull(r, preview)
    switch {
    case err == io.ErrUnexpectedEOF:
        preview = preview[:n]
        r = bytes.NewReader(preview)
    case err != nil:
        return nil, err
    default:
        r = io.MultiReader(bytes.NewReader(preview), r)
    }

    if e, _, _ := DetermineEncoding(preview, contentType); e != encoding.Nop {
        r = transform.NewReader(r, e.NewDecoder())
    }
    return r, nil
}

这个方法解了我的燃眉之急,我将返回结果转换成utf8编码,并将爬取的内容存入文件中查看内容,一切都符合预期。

示例代码:

r, _ := charset.NewReader(resp.Body, "UTF-8")
dom, err := goquery.NewDocumentFromReader(r)
if err != nil {
    log.Errorln("New Dom error", err)
    return ""
}

你可能感兴趣的:(【Go语言实战】爬虫GBK编码问题处理)