JavaScript кодирует строки с помощью UTF-16, то есть символы вне базовой многоязычной плоскости должны быть представлены в виде суррогатной пары. Расщепление строки в середине такой пары может объяснить ваши результаты.
Как я понимаю из статьи википедии , вам придется проверить, находится ли ваш последний символ в диапазоне 0xD800–0xDBFF, и, если это так, либо удалить его, либо добавить следующий символ (который должен быть в диапазоне 0xDC00-0xDFFF) до подстроки.