Bash 检测 ascii 艺术

Bash 检测 ascii 艺术

对于bash脚本,有没有一种简单的方法来检测文本是否包含ascii art?

ASCII 艺术的一个例子: 在此输入图像描述

答案1

首先,有一个问题:您在问题中没有提到编码,这让我倾向于相信您不知道它是如何影响这一点的。字符编码决定意义各个字节。这意味着我们需要从一个小的历史课开始,而这是否容易的答案已经是“不”。

从技术上讲,您的示例不是 ASCII。您首先讨论的扩展字符出现在 IBM 中代码页 437(有各种名称,例如 CP437、OEM 437 和 IBM437),但它们不属于更常用的互联网字符集(即ISO 8859-1又名 Latin-1) 直到UTF-8成为事实上的标准。 UTF-8 将这些字符以以下形式带回来块元素画盒人物等。应该注意的是,我提到的 Unicode 块包含 CP437 中最初不存在的字符,这使得字体支持不稳定。

有了这么多的了解,我们可以将其分为两个步骤:

  1. 确定应该使用什么编码来解释字节流。
  2. 确定您对哪些字节组合“感兴趣”。

正如其他人已经指出的那样,不可能检测常用的文本字符(即基本上 Latin-1 代码页中的任何内容,包括 7 位 ASCII 集)是否应被解释为艺术字符。那里您可以比平时更感兴趣的一系列字符,因为它们在艺术中使用的可能性要高得多。

为了大家头脑清醒,我假设我们在这里讨论的是 UTF-8。剖析您提供的示例,我们看到来自以下 Unicode 块的字符:

从现在开始,一切都是特定于实现的。您需要检查每个字符并确定它们是否属于您感兴趣的 Unicode 块。在没有经验的情况下手动执行此操作可能会很棘手,因为 UTF-8 是一种多字节编码:这意味着单个字符基本 7 位 ASCII 集之外的字符由多个字节表示。使用支持 UTF-8 的软件将大大简化这一过程。我不建议bash单独尝试使用此方法,正如您的问题标题所暗示的那样。

相关内容