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 關注
- 345 瀏覽
添加回答
舉報