Если вы посмотрите на запись Википедии в UTF8 , есть удобная таблица, которая показывает возможные типы многобайтовых конфигураций. Ключевым моментом UTF8 является то, что все начальные байты следуют одному набору битовых комбинаций, а все последующие байты следуют другому набору битов. Примечательно, что все последующие байты имеют битовую комбинацию 10xxxxxx.
Кажется, вы можете найти подходящую точку останова, отсканировав назад от конца строки, пока не найдете байт, который не соответствует 10xxxxxx; если этот байт равен 0xxxxxxx, тогда завершите строку после этого байта (поскольку это однобайтовая последовательность), в противном случае завершите строку в / перед ней (так как это начало многобайтовой последовательности), и добавьте байт (s). ) после него до начала следующей строки.