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 正确建议的那样,更恰当地说,它是一个交互式工具,而不是通过管道传输的东西。