2 回答
TA贡献1858条经验 获得超8个赞
似乎 golang.org/x/net/html/charset 包已经提供了一个带有可用编码的地图。以下代码对我有用:
import "golang.org/x/net/html/charset"
CharsetReader := func (label string, input io.Reader) (io.Reader, error) {
label = strings.Replace(label, "windows-", "cp", -1)
encoding, _ := charset.Lookup(label)
return encoding.NewDecoder().Reader(input), nil
}
dec := mime.WordDecoder{CharsetReader: CharsetReader}
text := "=?iso-2022-jp?b?GyRCRW1CQE86GyhCIDxtb21vQHRhcm8ubmUuanA=?="
header, err := dec.DecodeHeader(text)
谢谢你的帮助!
TA贡献1816条经验 获得超6个赞
我不确定这是否是您要查找的内容,但是golang.org/x/text我正在使用该软件包将 Windows-1251 转换为 UTF-8。代码看起来像
import (
"golang.org/x/text/encoding/charmap"
"golang.org/x/text/transform"
"io/ioutil"
"strings"
)
func convert(s string) string {
sr := strings.NewReader(s)
tr := transform.NewReader(sr, charmap.Windows1251.NewDecoder())
buf, err := ioutil.ReadAll(tr)
if err != nil {
return ""
}
return string(buf)
}
我认为在你的情况下,如果你想避免“一个大的'switch-case'”,你可以创建一种带有可用编码完整列表的地图,然后制作类似的东西:
var encodings = map[string]transform.Transformer{
"win-1251": charmap.Windows1251.NewDecoder(),
}
func convert(s, charset string) string {
buf, err := ioutil.ReadAll(transform.NewReader(strings.NewReader(s), encodings[charset]))
if err != nil {
return ""
}
return string(buf)
}
- 2 回答
- 0 关注
- 252 浏览
添加回答
举报