gpt4 book ai didi

utf-8 - 如何使用 Unicode 将 DOS ANSI (CP 437) 文件转换为 Unix ANSI?

转载 作者:行者123 更新时间:2023-12-02 07:32:41 28 4
gpt4 key购买 nike

来自 http://blocktronics.org/ 的 ANSI 文件似乎使用的是另一种 ANSI 编码,而不是我的 VT100 终端仿真器支持的编码。

如果我使用 tetraview 查看这些文件,它们看起来不错。但是,如果我使用 less -r 查看它们, block 字符将不起作用。如果我使用 iconv -f 437 -t utf-8 | less -r, block 字符有效,但字符对齐仍然是乱七八糟的。它在 tetraview 中工作,因此必须进行某种转换。

我写了一个脚本来抓取在 tmux 中运行的 tetraview 的屏幕内容,但这是一个 hack,我想做 的转换tetraview 自己做。

最佳答案

涉及两个问题:

  • 编码需要从CP 437转换过来到您的终端编码。这是使用 iconv -f 437 input_file.ANS 完成的正如您已经发现的那样。
  • ANSI escape sequences需要修复。

dman-warrior.ANS 有两个types of escape sequences用过的。第一个只使用一次,是文件中的第一件事。是ESC[0m并重置所有图形模式属性。第二种是ESC[<value>C (例如 ESC[24C )并移动光标 <value>字符向前(向右)。如果光标不能再移动,它就会停止。您可以使用此 shell 命令在终端中对其进行测试:

printf '\x1b[10000CXYZ\n'

它应该是这样的:

|$ printf '\x1b[10000CXYZ\n'              |
| X|
|YZ |
|$ |

图像文件只有几行(由 CRLF 分隔)。每个都包裹到终端宽度(80 列),从而产生多条屏幕线。

图像在以 ESC[<value>C 开头的第一行屏幕之前都是正常的文件行中间的转义序列。

  • 终端写入前一屏幕行,在最后一列结束。
  • ESC[<value>C满足转义序列。由于在最后一列,光标不能再向右移动,所以序列被忽略。
  • 接下来是一个字符,它强制换行并打印在接下来的屏幕行上。

新的屏幕行缺少本应被转义序列跳过的空白区域。

可能的解决方案

  • 以某种方式改变终端仿真器的行为。 (除了编译经过调整的自定义版本外,我不知道该怎么做。)
  • 明确断行。如果ESC[<value>C是唯一使用的转义序列,编写修复图像的程序应该很容易。

关于utf-8 - 如何使用 Unicode 将 DOS ANSI (CP 437) 文件转换为 Unix ANSI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com