是否有一种工具可以扫描小型文本文件并查找简单 ASCII 字符集中不存在的任何字符?
简单的 Java 或 Groovy 脚本也可以。
答案1
好吧,一个小时后它仍然在这里,所以我还是回答一下吧。这是一个简单的过滤器,它只打印输入中的非 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;
}
答案2
只需在文本文件上运行 $JDK_HOME/bin/native2ascii 并在输出文件中搜索“\u”。我假设您想找到它,这样您就可以转义它,这将为您节省一步。;)
答案3
我不知道这是否合法,将每个字符转换为 int 并使用 catch 来识别失败的内容。我也懒得用 Java 编写这个,所以用 Groovy
def chars = ['Ã', 'a', 'Â', 'ç', 'x', 'o', 'Ð'];
chars.each{
try{ def asciiInt = (int) it }
catch(Exception e){ print it + " "}
}
==> Ã Â ç Ð
答案4
一个简单的 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"
}
}
就这么简单: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)
}
该版本可以用作命令行脚本,并包含退出状态,以便可以链接。