2

Стандарт 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