Некоторые кодировки имеют байтовые метки, которые выбирают, как интерпретировать следующие символы (до следующей метки).
Так, например, после метки "японский" следующие символы интерпретируются как японские символы (но, например, 2 байта).за знак), после знака «латинский» символы интерпретируются как латинский 1.
Таким образом, чтобы декодировать строку, необходимо сохранить состояние (например, какая она является действительной интерпретацией).
В приведенном выше «примере» байт может интерпретироваться как японский или как латинский1, в зависимости от состояния.Первоначально строка имеет состояние по умолчанию, но если вы возьмете подстроку, вы пропустите «знак», поэтому строка будет интерпретирована (возможно) с неверной интерпретацией.
Поэтому необходимо скопировать статус (пометить) и поставить префикс в начале каждой подстроки.
ISO 2022 определяет способ реализации такой кодировки, и вы найдете в статье в Википедии различные реализации https://en.wikipedia.org/wiki/ISO/IEC_2022.
Теперь такие кодировкиустарели.Юникод превзошел их (особенно там, где 2022 были распространены, поэтому там, где кодировки были огромными проблемами. Примечание: UTF-8 также зависит от состояния (для байтов в символе / кодовой точке), но был реализован UTF-8, что состояние будет сброшено прикаждый символ (и первый байт символа имеет предопределенный диапазон). Unicode также сохраняет некоторые состояния, но не рекомендуется использовать его в Unicode (например, направление текста: правое и левое: их предпочтительно устанавливать кодировкой на более высоком уровне).уровень (например, HTML), а не с помощью кодов направления Unicode).