Andreas Schwab wrote: > Unibyte strings should not be used for anything but pre-decoding / > post-encoding situations directly after / before doing the actual I/O > operation. Thus substitute-command-keys should never be called with an > undecoded unibyte string. IMHO it would be ok to return something > useless in this case (but it shouldn't cause Emacs to crash, of course). Yes. This is in the Elisp manual, which says "We recommend that you never use unibyte buffers and strings except for manipulating encoded text or binary non-text data." Eli Zaretskii wrote: > as the original string is > unibyte, the output of "\200≠", which is multibyte, might not be what > the users expect. They might expect "\200\342\211\240" instead. No, as per Andreas's comment and the Elisp reference manual, users should not expect substitute-command-keys to do that. As long as it doesn't crash on non-ASCII unibyte data we needn't sweat the details about whether it returns unibyte or multibyte strings for such data. That being said, it shouldn't hurt to return the original string if there is no substitution. Although I think your first patch in should work, it'd be safer and simpler to backport that part of master, as in the attached patch to emacs-25.