fix: MIME-Encoded-Word-Betreffs mit Windows-1252 werden nicht dekodiert
decodeMIMEHeader() nutzte mime.WordDecoder ohne CharsetReader. Go kennt
dort nativ nur UTF-8/US-ASCII/ISO-8859-1, alles andere (z.B.
Windows-1252) ließ DecodeHeader() scheitern, Betreff blieb roh
("=?Windows-1252?Q?...?="). CharsetReader ergänzt, nutzt dieselbe
htmlindex-Logik wie decodeCharset() für den Body (vgl. PROJ-57).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WapWkrQusDuBMhaN8WyuXB
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
2aad899dfc
commit
31d71138c9
@@ -324,9 +324,20 @@ func decodeBody(data []byte, cte string) []byte {
|
||||
return data
|
||||
}
|
||||
|
||||
// decodeMIMEHeader decodes RFC 2047 encoded-word headers.
|
||||
// decodeMIMEHeader decodes RFC 2047 encoded-word headers. Go's mime package
|
||||
// only knows UTF-8/US-ASCII/ISO-8859-1 natively; CharsetReader closes that
|
||||
// gap for charsets like Windows-1252 using the same htmlindex lookup as
|
||||
// decodeCharset for the body.
|
||||
func decodeMIMEHeader(s string) string {
|
||||
dec := new(mime.WordDecoder)
|
||||
dec := &mime.WordDecoder{
|
||||
CharsetReader: func(charset string, input io.Reader) (io.Reader, error) {
|
||||
data, err := io.ReadAll(input)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return bytes.NewReader(decodeCharset(data, charset)), nil
|
||||
},
|
||||
}
|
||||
decoded, err := dec.DecodeHeader(s)
|
||||
if err != nil {
|
||||
return s
|
||||
|
||||
Reference in New Issue
Block a user