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
|
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 {
|
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)
|
decoded, err := dec.DecodeHeader(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s
|
return s
|
||||||
|
|||||||
Reference in New Issue
Block a user