forked from Silverfish/proton-bridge
fix: fallback to detecting charset if cannot handle specified one
This commit is contained in:
@ -61,13 +61,11 @@ func (p *Part) ConvertToUTF8() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var decoder *encoding.Decoder
|
decoder := selectDecoderFromParams(params)
|
||||||
|
|
||||||
if knownCharset, ok := params["charset"]; !ok {
|
if decoder == nil {
|
||||||
encoding, _, _ := charset.DetermineEncoding(p.Body, t)
|
encoding, _, _ := charset.DetermineEncoding(p.Body, t)
|
||||||
decoder = encoding.NewDecoder()
|
decoder = encoding.NewDecoder()
|
||||||
} else if decoder, err = pmmime.SelectDecoder(knownCharset); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.Body, err = decoder.Bytes(p.Body); err != nil {
|
if p.Body, err = decoder.Bytes(p.Body); err != nil {
|
||||||
@ -78,9 +76,24 @@ func (p *Part) ConvertToUTF8() error {
|
|||||||
if params == nil {
|
if params == nil {
|
||||||
params = make(map[string]string)
|
params = make(map[string]string)
|
||||||
}
|
}
|
||||||
|
|
||||||
params["charset"] = "utf-8"
|
params["charset"] = "utf-8"
|
||||||
|
|
||||||
p.Header.SetContentType(t, params)
|
p.Header.SetContentType(t, params)
|
||||||
|
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user