Существует ли инструмент, который может сканировать небольшой текстовый файл и искать любые символы, не входящие в простой набор символов ASCII?
Простой Java или Groovy-скрипт также подойдет.
Ну, это все еще здесь через час, так что я могу также ответить на него. Вот простой фильтр, который печатает только входные символы, не входящие в 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;
}
Просто запустите $ JDK_HOME/bin/native2ascii в текстовом файле и найдите «\u» в выходном файле. Я предполагаю, что вы хотите найти это, чтобы вы могли избежать этого в любом случае, и это спасет вас на шаг. ;)
Я понятия не имею, допустимо ли это, приводя каждый символ к типу int и используя улов для определения неудачных вещей. Мне тоже лень писать это в Java, так что немного Groovy
def chars = ['Ã', 'a', 'Â', 'ç', 'x', 'o', 'Ð'];
chars.each{
try{ def asciiInt = (int) it }
catch(Exception e){ print it + " "}
}
==> Ã Â ç Ð
В 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
на все, что вам нужно.
Простой заводной пример:
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)
}
Эта версия может использоваться в качестве сценария командной строки и включает состояние выхода, поэтому она может быть связана.