Primeiro, há um problema: você não mencionou a codificação em sua pergunta, o que me faz inclinado a acreditar que você não está ciente de como isso contribui para isso. As codificações de caracteres determinam o significado de bytes individuais. Isso significa que precisamos começar com uma pequena lição de história, e a resposta para se isso é fácil ou não já é "não".
Seu exemplo tecnicamente não é ASCII. Os caracteres estendidos que você está discutindo primeiro apareceram na IBM Página de códigos 437 (conhecido por vários nomes, como CP437 , OEM 437 e IBM437), mas eles não faziam parte dos conjuntos de caracteres de Internet mais usados (por exemplo, ISO 8859- 1 AKA Latin-1) até UTF-8 se tornou o padrão de fato. O UTF-8 trouxe esses caracteres de volta na forma de Elementos de Bloqueio e Caracteres de desenho de caixas , entre outros. Deve-se notar que os blocos Unicode que eu mencionei contêm caracteres que não estavam originalmente presentes no CP437, o que torna o suporte a fonte irregular.
Com tanto entendimento, podemos dividir isso em duas etapas:
- Determine com que codificação um fluxo de bytes deve ser interpretado.
- Determine quais combinações de bytes são "interessantes" para você.
Como outros já afirmaram, é impossível detectar se caracteres de texto comumente usados (ou seja, basicamente qualquer coisa na página de códigos Latin-1, incluindo o conjunto ASCII de 7 bits) devem ser interpretados como artísticos. Existem intervalos de caracteres que você pode ter mais interesse do que o normal devido a uma probabilidade muito maior de que eles estejam sendo usados na arte.
Para o bem da sanidade de todos, vou assumir que estamos discutindo o UTF-8 aqui. Dissecando o exemplo fornecido, vemos caracteres dos seguintes blocos Unicode:
- Formas geométricas
- Elementos do bloco (sobre o qual falamos anteriormente)
De agora em diante, tudo é específico da implementação. Você precisa examinar cada caractere e determinar se eles estão ou não em um bloco Unicode em que você está interessado. Fazer isso manualmente sem experiência pode ser complicado, pois UTF-8 é uma codificação de múltiplos bytes: isso significa que caracteres individuais fora do conjunto básico ASCII de 7 bits são representados por mais de um byte. Usar um software que esteja ciente do UTF-8 simplificará bastante isso. Eu não recomendo tentar isso usando bash
sozinho como o título da sua pergunta implica.