登录
首页 >  Golang >  Go问答

"在 Go 中解析 ISO-8859-1 格式的 XML 输入"

来源:stackoverflow

时间:2024-03-20 09:30:32 168浏览 收藏

当使用 XML 输入且其编码不是 UTF-8 时,Go 的 xml 包需要 CharsetReader。go-charset 包提供了 charset.NewReader,它允许指定字符集以正确解析输入。通过设置 charset.CharsetDir 或导入 data 包,可以轻松使用 charset 包。这允许您将 CharsetReader 分配给 xml.Decoder 的 CharsetReader 字段,从而能够处理非 UTF-8 编码的 XML 输入。

问题内容

当您的 XML 输入未采用 UTF-8 编码时,xml 包的 Unmarshal 函数似乎需要 CharsetReader

哪里可以找到这样的东西?


解决方案


2015 年及以后的更新答案:

import (
    "encoding/xml"
    "golang.org/x/net/html/charset"
)
reader := bytes.newreader(thexml)
decoder := xml.newdecoder(reader)
decoder.charsetreader = charset.newreaderlabel
err = decoder.decode(&parsed)

扩展@anschel-schaffer-cohen的建议和@mjibson的评论, 使用上面提到的go-charset包可以让你使用这三行

decoder := xml.newdecoder(reader)
decoder.charsetreader = charset.newreader
err = decoder.decode(&parsed)

达到所需的结果。只需记住通过调用让 charset 知道其数据文件在哪里

charset.charsetdir = ".../src/code.google.com/p/go-charset/datafiles"

在应用程序启动时的某个时刻。

编辑

与上述不同,charset.charsetdir = 等更明智的是仅导入数据文件。它们被视为嵌入式资源:

import (
    "code.google.com/p/go-charset/charset"
    _ "code.google.com/p/go-charset/data"
    ...
)

go install 只会做它的事情,这也避免了部署问题(在哪里/如何获取与执行应用程序相关的数据文件?)。

使用带有下划线的 import 只是调用包的 init() 函数,它将所需的内容加载到内存中。

今天关于《"在 Go 中解析 ISO-8859-1 格式的 XML 输入"》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>