Перекодировать текст из ISO-2022-JP ↓
В начале развития интернета электронная почта могла надёжно передавать только семибитные символы ASCII. Почтовые серверы, получив байт со старшим битом, могли его обрезать, и японский текст в Shift_JIS или EUC-JP превращался в бессмыслицу. Решением стала кодировка ISO-2022-JP, которую часто называют просто "JIS". Она позволяет записать японский текст, используя только семибитные символы, и долгие годы оставалась стандартом японской электронной почты.
Кодировка описана в документе RFC 1468, опубликованном в 1993 году, и основана на международном стандарте ISO 2022, который определяет способ переключения между разными наборами символов. Идея заключается в использовании управляющих последовательностей. Специальная последовательность байтов, начинающаяся с символа ESC, сообщает программе, что дальше идут японские символы, а другая последовательность возвращает обычный режим ASCII.
Внутри японского режима каждый иероглиф записывается двумя семибитными байтами, которые совпадают с кодами символов ASCII. Например, иероглифы "文字" записываются так же, как латинские символы "J8;z". Без управляющих последовательностей программа не могла бы отличить японский текст от английского. Поэтому ISO-2022-JP называют кодировкой с состояниями: значение байта зависит от того, какой режим был включён раньше.
Такая схема гарантировала, что письмо пройдёт через любой почтовый сервер без искажений. Но она создавала и трудности. Если управляющие последовательности теряются, например при копировании части текста или при обработке программой, не понимающей кодировки, японский текст превращается в набор латинских символов. Слово "文字" без символа ESC выглядит как "$BJ8;z(B": видны остатки управляющих последовательностей и латинские символы, которые на самом деле являются байтами иероглифов.
Из-за состояний с ISO-2022-JP сложно работать программно. Нельзя начать чтение с середины текста, не зная текущего режима, а простой поиск подстроки может найти совпадение внутри японского текста там, где его нет. Поэтому внутри программ японский текст обычно хранят в другой кодировке, а ISO-2022-JP используют только для передачи по почте.
У кодировки есть и ограничения. Она поддерживает только символы стандарта JIS X 0208 и не содержит полуширинной катаканы, которую почтовые программы были вынуждены заменять полноширинной. Многие символы, добавленные производителями в Shift_JIS, тоже в ней отсутствуют. Позднее появились расширенные варианты, но базовая ISO-2022-JP так и осталась самой распространённой.
Сегодня японская почта в основном использует UTF-8, но ISO-2022-JP по-прежнему встречается в старых письмах, почтовых архивах и рассылках. Если в японском письме вместо иероглифов стоят латинские символы с последовательностями вроде "$B" и "(B", укажите ISO-2022-JP исходной кодировкой и преобразуйте текст в UTF-8.