Go下解析XML文档时的编码问题

目录

最近在弄一些 RSS 解析的东西,记录一下如何解析非UTF-8编码 XML 文档,直接上代码

package rss_test

import (
    "bytes"
    "encoding/xml"
    "fmt"
    "io"
    "testing"

    "github.com/yujiahaol68/rossy/rss"
    "golang.org/x/net/html/charset"
)

func Test_notUTF8(t *testing.T) {
    r := rss.New()

    // 注意不要使用 xml.Unmarshal() 这个方法,仅用于只有 utf-8 编码的情况
    d := xml.NewDecoder(bytes.NewReader([]byte(notUTF8rss)))
    // 设置编码处理函数,utf-8 编码下也可用
    d.CharsetReader = func(s string, reader io.Reader) (io.Reader, error) {
        return charset.NewReader(reader, s)
    }
    err := d.Decode(r)

    if err != nil {
        t.Fatal(err)
    }

    for _, item := range r.ItemList {
        fmt.Printf("* %s\n%s\n", item.Title, item.Link)
    }
}