Инструменты для преобразования 8-битных управляющих символов C1 в ESC-последовательности?

Стандарт ECMA-48 ("escape-последовательности ANSI") описывает два способа кодирования набора управляющих кодов C1: использование двухсимвольных последовательностей ESC или, альтернативно, использование 8-разрядных управляющих символов.

В статьях Википедии объясняется, что двухсимвольные последовательности ESC более подходят для использования с UTF-8.

Цитирование из escape-кода ANSI:

Стандарт гласит, что в 8-битных средах эти двухбайтовые последовательности могут быть объединены в один управляющий код C1 в диапазоне 0x80–0x9F. Однако на современных устройствах эти коды часто используются для других целей, таких как части UTF-8 или для символов CP-1252, поэтому используется только 2-байтовая последовательность.

и из контрольных кодов C0 и C1:

Символам C1 в Unicode требуется 2 байта для кодирования в UTF-8 (например, CSI в U+009B кодируется как байты 0xC2, 0x9B в UTF-8). Таким образом, соответствующие функции управления чаще доступны с использованием эквивалентной двухбайтовой escape-последовательности, предназначенной для использования с системами, которые имеют только 7-битные байты.


Есть ли какие-либо инструменты командной строки, которые можно использовать для прямого преобразования 8-битных управляющих символов C1 (как указано в ECMA-48) в двухсимвольные последовательности ESC?

Моя лучшая попытка на данный момент - попытаться использовать iconv:

$ printf $(echo -en "\x9b") | iconv --from-code=ANSI_X3.4 --to-code=UTF-8 | od -t x1
iconv: illegal input sequence at position 0

В целях отладки я использую od -t x1 сделать результат обратно в шестнадцатеричное. Результат, который я надеюсь получить, будет таким же, как результат выполнения:

$ printf $(echo -en "\x27[") | od -t x1
0000000 27 5b
0000002

Другими словами, существует ли инструмент командной строки, где вы можете передать в управляющий символ C1, например \x9b и получить обратную последовательность, как \x27[?

РЕДАКТИРОВАТЬ: Или, как справедливо предлагает egmont, более уместно, интерактивный инструмент, а не то, что вы трубите в.

0 ответов

Другие вопросы по тегам