Golang如何检测网页编码格式?

39 min read

Golang可以通过以下步骤来检测网页编码格式:

  1. 使用net/http包的Get方法获取网页内容。

  2. 从响应中获取Content-Type头信息,该头信息包含了网页的编码格式。

  3. 如果Content-Type头信息不存在或无法获取,可以使用golang.org/x/net/html包解析网页中的meta标签,以获取编码格式。

下面是一个示例代码:

package main

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

	"golang.org/x/net/html"
)

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

	contentType := resp.Header.Get("Content-Type")
	if contentType != "" {
		encoding := ""
		if strings.Contains(contentType, "charset=") {
			encoding = strings.Split(contentType, "charset=")[1]
		}
		fmt.Println("Page encoding: ", encoding)
	} else {
		htmlData := html.NewTokenizer(resp.Body)
		for {
			tokenType := htmlData.Next()
			if tokenType == html.ErrorToken {
				break
			}
			if tokenType == html.StartTagToken {
				token := htmlData.Token()
				if token.Data == "meta" && strings.Contains(token.String(), "charset=") {
					content := token.String()
					encoding := strings.Split(content, "charset=")[1]
					fmt.Println("Page encoding: ", encoding)
					break
				}
			}
		}
	}
}

该代码会先尝试从响应中获取Content-Type头信息,如果获取不到编码格式,则会使用golang.org/x/net/html包解析网页中的meta标签以获取编码格式。