bashスクリプトの場合、テキストにASCIIアートが含まれているかどうかを簡単に検出する方法はありますか?
ASCIIアートの例:
答え1
まず、問題:質問にエンコーディングを言及していないので、エンコーディングがこれにどのような影響を与えるのかわからないと思いました。文字エンコーディングの決定重要性個々のバイト。これは、私たちが小さな歴史の授業から始めなければならないことを意味し、これが簡単であるかどうかの答えはすでに「いいえ」です。
技術的には、あなたの例はASCIIではありません。説明した拡張文字は、IBMに最初に表示されます。コードページ437(CP437、OEM 437、IBM437などのさまざまな名前)しかし、より一般的に使用されるインターネット文字セット(例:ISO 8859-1別名ラテン語-1)までUTF-8事実上の標準になります。 UTF-8 はこれらの文字を次の形式に戻します。ブロック要素そしてペインティングボックスフィギュア待つ。私が言及したUnicodeブロックには、もともとCP437にはない文字が含まれており、フォントのサポートが不安定であることに注意してください。
多くの理解に基づいて、これを2つの段階に分けることができます。
- バイトストリームを解釈するためにどのエンコーディングを使用すべきかを決定します。
- 「関心」のあるバイトの組み合わせを決定します。
他の人がすでに指摘したように、一般的に使用されるテキスト文字(つまり、デフォルトでは7ビットASCIIセットを含むLatin-1コードページのすべての項目)がアート文字として解釈されるべきかどうかを検出することは不可能です。そこはい芸術作品に活用される確率がはるかに高く、普段よりもっと興味を感じられる一連のキャラクターです。
私の精神のために、ここではUTF-8について話しているとします。提供した例を分析すると、次のUnicodeブロックの文字が表示されます。
これからは、すべてが実装によって異なります。各文字を調べて、その文字が関心のあるUnicodeブロックに属していることを確認する必要があります。 UTF-8はマルチバイトエンコーディングなので、経験なしに手動でこれを行うのは難しいかもしれません。つまり、基本7ビットASCIIセットの外側の単一文字が複数バイトで表されることを意味します。 UTF-8をサポートするソフトウェアを使用すると、このプロセスが大幅に簡素化されます。bash
質問のタイトルが示すように、この方法だけを単独で試すことはお勧めできません。