2016-04-12 23 views
2

でないHTMLページをデコードしようとしています。 utf-8がエンコードされています。golang HTML文字セットのデコード

<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 

これを実行できるライブラリはありますか?私はオンラインで見つけることができませんでした。

P.Sもちろん、私はcharsetを抽出し、goqueryとiconv-goでHTMLページをデコードできますが、私は車輪を再発明しないようにしています。

答えて

0

goqueryがあなたのニーズを満たす場合があります。例:

import "https://github.com/PuerkitoBio/goquery" 

func main() { 
    d, err := goquery.NewDocument("http://www.google.com") 
    dh := d.Find("head") 
    dc := dh.Find("meta[http-equiv]") 
    c, err := dc.Attr("content") // get charset 
    // ... 
} 

Document構造体でさらに操作できます。

2

Golangは正式に拡張パッケージ「charset」とencodingを提供しています。

以下のコードでは、文書がHTMLパッケージによって正しく解析することができますを確認します:

func detectContentCharset(body io.Reader) string { 
    r := bufio.NewReader(body) 
    if data, err := r.Peek(1024); err == nil { 
     if _, name, ok := charset.DetermineEncoding(data, ""); ok { 
      return name 
     } 
    } 
    return "utf-8" 
} 

// Decode parses the HTML body on the specified encoding and 
// returns the HTML Document. 
func Decode(body io.Reader, charset string) (interface{}, error) { 
    if charset == "" { 
     charset = detectContentCharset(body) 
    } 
    e, err := htmlindex.Get(charset) 
    if err != nil { 
     return nil, err 
    } 

    if name, _ := htmlindex.Name(e); name != "utf-8" { 
     body = e.NewDecoder().Reader(body) 
    } 

    node, err := html.Parse(body) 
    if err != nil { 
     return nil, err 
    } 
    return node, nil 
}