>Currently, Pike's MIME.Message parser doesn't handle non-ASCII headers
>with specified encodings:

Sure it does.

> MIME.Message("Subject: =?UTF-8?B?SGVsbG8sIPCfjJA=?=\r\n\r\nHello, world!");
(1) Result: Message(([ ]))
> MIME.decode_words_text_remapped(_->headers->subject);
(2) Result: "Hello, \U0001f310"
>

It is not done automatially for two reasons:

1) RFC1522 encoding is only applicable to certain headers, and the way
   it is applied differs between two types of fields (tokenized
   fields, and free text fields).  Thus, the application will need to
   use the function that is appropriate for the specific field it is
   accessing.

2) A remapping to unicode is not always needed or preferrable.
   Therefore an option is given to use a different set of function
   that preserves the original encoding:

> MIME.decode_words_text(_->headers->subject);
(2) Result: ({ /* 1 element */
                ({ /* 2 elements */
                    "Hello, \360\237\214\220",
                    "utf-8"
                })
            })
>

Encoding works similarly:

> MIME.Message("Hello, world!", (["Subject": 
> MIME.encode_words_text_remapped("Hello, \U0001F310", "base64", "utf-8")]));
(1) Result: Message(([ ]))
> (string)_;
(2) Result: "Content-Length: 13\r\n"
            "Subject: Hello, =?utf-8?b?8J+MkA==?=\r\n"
            "\r\n"
            "Hello, world!"
>
    • ... Chris Angelico
      • ... Chris Angelico
        • ... Chris Angelico
          • ... Martin Karlgren
            • ... Chris Angelico
              • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
          • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
        • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
        • ... Chris Angelico
      • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
  • MIM... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum

Reply via email to