Correct me if I'm wrong. I read cod eand found definion of Lisp_String: struct GCALIGNED Lisp_String { ptrdiff_t size; ptrdiff_t size_byte; INTERVAL intervals; /* Text properties in this string. */ unsigned char *data; }; I understand string text is encoded in UTF8 format and is stored in 'Lisp_String::data'. There is actually no difference between unibyte and multibyte text since UTF8 is compatible with ASCII and we only deal with 'data' field. I attached the latest patch.