将 8 位 C1 控制字符转换为 ESC 序列的工具?

将 8 位 C1 控制字符转换为 ESC 序列的工具?

ECMA-48(“ANSI 转义序列”)标准描述了对 C1 控制代码集进行编码的两种方式:使用 2 个字符的 ESC 序列,或者使用 8 位控制字符。

维基百科文章解释说,两个字符的 ESC 序列更适合与 UTF-8 一起使用。

引自ANSI 转义码

标准规定,在 8 位环境中,这些双字节序列可以合并为 0x80–0x9F 范围内的单个 C1 控制代码。然而,在现代设备上,这些代码通常用于其他目的,例如 UTF-8 的一部分或 CP-1252 字符,因此只使用 2 字节序列。

以及来自C0 和 C1 控制代码

Unicode 中的 C1 字符需要 2 个字节才能以 UTF-8 进行编码(例如,U+009B 处的 CSI 在 UTF-8 中编码为字节 0xC2、0x9B)。因此,相应的控制功能更常使用等效的两字节转义序列来访问,该序列旨在用于只有 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 正确建议的那样,更恰当地说,它是一个交互式工具,而不是通过管道传输的东西。

相关内容