Function: rfc2231-decode-encoded-string
rfc2231-decode-encoded-string is a byte-compiled function defined in
rfc2231.el.gz.
Signature
(rfc2231-decode-encoded-string STRING)
Documentation
Decode an RFC2231-encoded string.
These look like:
"us-ascii\\='en-us\\='This%20is%20%2A%2A%2Afun%2A%2A%2A",
"us-ascii\\='\\='This%20is%20%2A%2A%2Afun%2A%2A%2A",
"\\='en-us\\='This%20is%20%2A%2A%2Afun%2A%2A%2A",
"\\='\\='This%20is%20%2A%2A%2Afun%2A%2A%2A", or
"This is ***fun***".
Source Code
;; Defined in /usr/src/emacs/lisp/mail/rfc2231.el.gz
(defun rfc2231-decode-encoded-string (string)
"Decode an RFC2231-encoded string.
These look like:
\"us-ascii\\='en-us\\='This%20is%20%2A%2A%2Afun%2A%2A%2A\",
\"us-ascii\\='\\='This%20is%20%2A%2A%2Afun%2A%2A%2A\",
\"\\='en-us\\='This%20is%20%2A%2A%2Afun%2A%2A%2A\",
\"\\='\\='This%20is%20%2A%2A%2Afun%2A%2A%2A\", or
\"This is ***fun***\"."
(if (not (string-match "\\`\\(?:\\([^']+\\)?'\\([^']+\\)?'\\)?\\(.+\\)\\'"
string))
(error "Unrecognized RFC2231 format: %S" string)
(let ((value (match-string 3 string))
;;(language (match-string 2 string))
(coding-system (mm-charset-to-coding-system
(match-string 1 string) nil t)))
(mm-with-unibyte-buffer
(insert value)
(goto-char (point-min))
(while (re-search-forward "%\\([[:xdigit:]][[:xdigit:]]\\)" nil t)
(insert
(prog1
(string-to-number (match-string 1) 16)
(delete-region (match-beginning 0) (match-end 0)))))
;; Decode using the charset, if any.
(if (memq coding-system '(nil ascii))
(buffer-string)
(decode-coding-string (buffer-string) coding-system))))))