package message import ( "io" "strings" "golang.org/x/text/encoding/ianaindex" ) // DecodeReader returns a reader that reads from r, decoding as charset. If // charset is empty, us-ascii, utf-8 or unknown, the original reader is // returned and no decoding takes place. func DecodeReader(charset string, r io.Reader) io.Reader { switch strings.ToLower(charset) { case "", "us-ascii", "utf-8": return r } enc, _ := ianaindex.MIME.Encoding(charset) if enc == nil { enc, _ = ianaindex.IANA.Encoding(charset) } // todo: ianaindex doesn't know all encodings, e.g. gb2312. should we transform them, with which code? if enc == nil { return r } return enc.NewDecoder().Reader(r) }