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))))))