fix: fallback to detecting charset if cannot handle specified one

This commit is contained in:
James Houlahan
2020-08-11 12:04:08 +02:00
parent 180c6699e0
commit 5343a6fc0f

View File

@ -61,13 +61,11 @@ func (p *Part) ConvertToUTF8() error {
return err
}
var decoder *encoding.Decoder
decoder := selectDecoderFromParams(params)
if knownCharset, ok := params["charset"]; !ok {
if decoder == nil {
encoding, _, _ := charset.DetermineEncoding(p.Body, t)
decoder = encoding.NewDecoder()
} else if decoder, err = pmmime.SelectDecoder(knownCharset); err != nil {
return err
}
if p.Body, err = decoder.Bytes(p.Body); err != nil {
@ -78,9 +76,24 @@ func (p *Part) ConvertToUTF8() error {
if params == nil {
params = make(map[string]string)
}
params["charset"] = "utf-8"
p.Header.SetContentType(t, params)
return nil
}
func selectDecoderFromParams(params map[string]string) *encoding.Decoder {
charset, ok := params["charset"]
if !ok {
return nil
}
decoder, err := pmmime.SelectDecoder(charset)
if err != nil {
return nil
}
return decoder
}