1 回答
TA贡献1817条经验 获得超6个赞
您忽略了从xml.Unmarshal. 通过稍微修改您的程序,我们可以看到发生了什么:
xml: encoding "ISO-8859-1" declared but Decoder.CharsetReader is nil
而在文档中闲逛,我们发现,在默认情况下的包只支持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)
因此,您似乎需要提供自己的字符集转换例程。您可以通过像这样修改代码来注入它:
decoder := xml.NewDecoder(xmlFile)
decoder.CharsetReader = makeCharsetReader
err := decoder.Decode(&tides)
(请注意,我们现在正在从一个io.Reader而不是字节数组解码,因此ReadAll可以删除逻辑)。该golang.org/x/text/encoding套餐的家庭可能会帮助您实施makeCharsetReader功能。像这样的事情可能会奏效:
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)
}
然后您应该能够解码 XML。
- 1 回答
- 0 关注
- 136 浏览
添加回答
举报