Como posso encontrar caracteres não-ASCII em arquivos de texto?

5

Existe uma ferramenta que pode escanear um pequeno arquivo de texto e procurar por qualquer caractere que não esteja no simples conjunto de caracteres ASCII?

Um script Java ou Groovy simples também serve.

    
por Marcus Leon 31.08.2011 / 02:35

5 respostas

2

Bem, ainda está aqui depois de uma hora, então eu também posso responder. Aqui está um filtro simples que imprime somente caracteres não-ASCII de sua entrada, e dá o código de saída 0 se não houvesse nenhum e 1 se houvesse. Lê somente de entrada padrão.

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    int c, flag = 0;

    while ((c = getchar()) != EOF)
        if (!isascii(c)) {
            putchar(c);
            flag = 1;
        }

    return flag;
}
    
por 31.08.2011 / 03:47
1

Basta executar $ JDK_HOME / bin / native2ascii no arquivo de texto e procurar por "\ u" no arquivo de saída. Eu estou supondo que você quer encontrá-lo para que você possa escapar de qualquer maneira e isso vai lhe poupar um passo. ;)

    
por 31.08.2011 / 05:54
0

Eu não tenho idéia se isso é legítimo, lançando cada caractere para um int e usando uma captura para identificar as coisas que falham. Eu também estou com preguiça de escrever isso em java, então tenha algum Groovy

def chars = ['Ã', 'a', 'Â', 'ç', 'x', 'o', 'Ð'];

chars.each{
    try{ def asciiInt = (int) it }
    catch(Exception e){ print it + " "}
}

== > Ã Ð

    
por 31.08.2011 / 05:36
0

Em Java (supondo que a string seja especificada como o primeiro argumento de linha de comando:

public class Main
{
    public static void main(String[] args)
    {
        String stringToSearch = args[0];
        int len = stringToSearch.length();
        for (int i = 0; i < len; i++)
        {
            char ch = stringToSearch.charAt(i);
            if (ch >= 128) // non-ascii
            {
                System.out.print(ch + " ");
            }
        }
        System.out.println();
    }
}

Para fazer isso, substitua stringToSearch pelo que você precisar.

    
por 31.08.2011 / 05:42
0

Um exemplo simples de groovy:

def str = [ "this doesn't have any unicode", "this one does ±ÁΘ·€ÔÅ" ]

str.each {
    if( it ==~ /[\x00-\x7F]*/ ) {
        println "all ascii: $it"
    } else {
        println "NOT ASCII: $it"
    }
}

É tão simples quanto este bit aqui: it ==~ /[\x00-\x7F]*/

Editar: Esqueci de incluir uma versão para arquivos. Oops:

def text = new File(args[0]).text
if( text ==~ /[\x00-\x7F]*/ ) {
    println "${args[0]} is only ASCII"
    System.exit(0)
} else {
    println "${args[0]} contains non-ASCII characters"
    System.exit(-1)
}

Essa versão pode ser usada como um script de linha de comando e inclui um status de saída para que possa ser encadeada.

    
por 31.08.2011 / 06:04