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)
}
}