直接上代码,里面有详细的注释:
package main
import (
"bufio"
"fmt"
"golang.org/x/net/html/charset"
"golang.org/x/text/encoding"
"golang.org/x/text/transform"
"io"
"io/ioutil"
"net/http"
)
func main() {
resp,err := http.Get("http://www.zhenai.com/zhenghun")
if err != nil {
panic(err)
}
defer resp.Body.Close()
//网页的编码是未知的,可能是GBK、UTF8等,所以要是能包装个方法去判断网络编码就好了
//正好golang.org/net/html包中有个chartset.DetermineEncoding方法可以直接拿来使用
//把现在把这个方法给重新包装成DetermineEncoding()来用
e := DetermineEncoding(resp.Body)
//用对应的编码读取网页编码
utf8Reader := transform.NewReader(resp.Body,e.NewDecoder())
if resp.StatusCode == http.StatusOK {
all,err := ioutil.ReadAll(utf8Reader)
if err != nil {
panic(err)
}
fmt.Printf("%s\n",all)
}
}
//判断网络编码
func DetermineEncoding(r io.Reader)encoding.Encoding {
bytes,err := bufio.NewReader(r).Peek(1024)
if err != nil{
panic(err)
}
encode,_,_ := charset.DetermineEncoding(bytes,"")
return encode
}
代码中用到的golang.org系统包的下载方式可参见我的博客:
https://blog.youkuaiyun.com/wangqiang9x/article/details/88558174