5

Существует ли инструмент, который может сканировать небольшой текстовый файл и искать любые символы, не входящие в простой набор символов ASCII?

Простой Java или Groovy-скрипт также подойдет.

5 ответов5

2

Ну, это все еще здесь через час, так что я могу также ответить на него. Вот простой фильтр, который печатает только входные символы, не входящие в ASCII, и выдает код выхода 0, если их не было, и 1, если они были. Читает только со стандартного ввода.

#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;
}
1

Просто запустите $ JDK_HOME/bin/native2ascii в текстовом файле и найдите «\u» в выходном файле. Я предполагаю, что вы хотите найти это, чтобы вы могли избежать этого в любом случае, и это спасет вас на шаг. ;)

0

Я понятия не имею, допустимо ли это, приводя каждый символ к типу int и используя улов для определения неудачных вещей. Мне тоже лень писать это в Java, так что немного Groovy

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

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

==> Ã Â ç Ð

0

В Java (при условии, что строка указана в качестве первого аргумента командной строки:

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();
    }
}

Чтобы сделать это самостоятельно, замените stringToSearch на все, что вам нужно.

0

Простой заводной пример:

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"
    }
}

Это так просто, как этот бит здесь: it ==~ /[\x00-\x7F]*/

Изменить: я забыл включить версию для файлов. К сожалению:

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)
}

Эта версия может использоваться в качестве сценария командной строки и включает состояние выхода, поэтому она может быть связана.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .