mm-util.el contains the following function: (defun mm-find-mime-charset-region (b e &optional hack-charsets) "Return the MIME charsets needed to encode the region between B and E. Nil means ASCII, a single-element list represents an appropriate MIME charset, and a longer list means no appropriate charset." (let (charsets) ;; The return possibilities of this function are a mess... (or (and (mm-multibyte-p) (fboundp 'find-coding-systems-region) ;; Find the mime-charset of the most preferred coding ;; system that has one. (let ((systems (find-coding-systems-region b e))) ;; Fixme: The `mime-charset' (`x-ctext') of `compound-text' ;; is not in the IANA list. (setq systems (delq 'compound-text systems)) (unless (equal systems '(undecided)) (while systems (let ((cs (coding-system-get (pop systems) 'mime-charset))) (if cs (setq systems nil charsets (list cs)))))) charsets)) ;; Otherwise we're not multibyte, XEmacs or a single coding ;; system won't cover it. (setq charsets (mm-delete-duplicates (mapcar 'mm-mime-charset (delq 'ascii (mm-find-charset-region b e)))))) (if (and (memq 'iso-8859-15 charsets) (memq 'iso-8859-15 hack-charsets) (save-excursion (mm-iso-8859-x-to-15-region b e))) (mapcar (lambda (x) (setq charsets (delq (car x) charsets))) mm-iso-8859-15-compatible)) (if (and (memq 'iso-2022-jp-2 charsets) (memq 'iso-2022-jp-2 hack-charsets)) (setq charsets (delq 'iso-2022-jp charsets))) charsets)) How do do something like 'find-coding-systems-region' with XEmacs? As XEmacs doesn't have this function, only the second part of the 'or' is used with XEmacs. The result is that UTF-8 is never used, although XEmacs works fine with UTF-8 together with Mule-UCS (I add a German umlaut here to force this message to use UTF-8: 'ö'). I applied the following small patch to mm-util.el to make it possible to use UTF-8 in outgoing mail with XEmacs and Mule-UCS