1 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
您忽略了從xml.Unmarshal. 通過稍微修改您的程序,我們可以看到發(fā)生了什么:
xml: encoding "ISO-8859-1" declared but Decoder.CharsetReader is nil
而在文檔中閑逛,我們發(fā)現(xiàn),在默認(rèn)情況下的包只支持XML的UTF-8編碼:
// CharsetReader, if non-nil, defines a function to generate
// charset-conversion readers, converting from the provided
// non-UTF-8 charset into UTF-8. If CharsetReader is nil or
// returns an error, parsing stops with an error. One of the
// the CharsetReader's result values must be non-nil.
CharsetReader func(charset string, input io.Reader) (io.Reader, error)
因此,您似乎需要提供自己的字符集轉(zhuǎn)換例程。您可以通過像這樣修改代碼來注入它:
decoder := xml.NewDecoder(xmlFile)
decoder.CharsetReader = makeCharsetReader
err := decoder.Decode(&tides)
(請注意,我們現(xiàn)在正在從一個(gè)io.Reader而不是字節(jié)數(shù)組解碼,因此ReadAll可以刪除邏輯)。該golang.org/x/text/encoding套餐的家庭可能會(huì)幫助您實(shí)施makeCharsetReader功能。像這樣的事情可能會(huì)奏效:
import "golang.org/x/text/encoding/charmap"
func makeCharsetReader(charset string, input io.Reader) (io.Reader, error) {
if charset == "ISO-8859-1" {
// Windows-1252 is a superset of ISO-8859-1, so should do here
return charmap.Windows1252.NewDecoder().Reader(input), nil
}
return nil, fmt.Errorf("Unknown charset: %s", charset)
}
然后您應(yīng)該能夠解碼 XML。
- 1 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)