检测UTF-8编码文本文件

时间:2015-06-09 17:30:38

标签: regex encoding awk utf-8 scripting

我有一个用错误的字符编码编辑的文本文件,因此当我使用UTF-8打开它时,在某些字符串中有一些mojibake和损坏的字符。什么脚本语言在检测这些损坏的字符时效率最高? Perl不是一个选择。我基本上试图找到一种方法来使用脚本扫描文本文件并输出行号并可能偏移找到损坏的字符。我该怎么做?我在考虑使用AWk,但我不知道在搜索损坏的字符时使用什么正则表达式。如果我可以指向正确的方向,那就太好了。

更全面的输入:

我希望脚本告诉我具有损坏字符的行号,这将是上例中的第五行。此外,文本文件中还有不同的语言。我有英语 中文, 法国, 西班牙, 俄语, 葡萄牙语, 土耳其, French_Euro, 德语, 荷兰人, 佛兰芒语, 韩国, Portuguese_Moz。而且我还有一些特殊的角色,比如#和!和***

我用这个if语句来获得上面的输出:

if($1 ~ /[^\x00-\x7F]/){
print NR ":" , $0 > "output.txt";
count++;
}

1 个答案:

答案 0 :(得分:3)

这将查找ASCII范围之外的所有字符:

$ awk '/[^\x00-\x7F]/{ print NR ":", $0 }' file
1: Interruptor EC não está em DESLOCAR
4: 辅助驾驶室门关闭
5: Porte cab. aux. fermée
7: Дверь аппаратной камеры закрыта
13: 高压ä¿æŠ¤æ‰‹æŸ„å‘下
14: Barrière descendue
16: Огранич. Планка ВВК опущ.
19: Barra de separação descida
22: DP未å¯åŠ¨
23: Puiss. rép. non activée
25: !!! ВнешнÑÑ Ð¼Ð¾Ñ‰Ð½Ð¾ÑÑ‚ÑŒ не включена
26: Potência Dist Não Ativada
28: Potência dist não activada
31: 机车未移动
33: Motor no se está moviendo
34: Локомотив неподвижен
35: Auto Não se Movendo
37: A não se move
40: 机车状况å…许自动åœæœº
41: Conditions auto\npermettent arrêt auto
43: УÑтановки локомотива\nПредуÑматривают Ð     °Ð²Ñ‚оматичеÑкую оÑтановку
44: Condições da moto\nPermitem Auto Parada

这够好吗?如果没有,请编辑您的问题以显示更全面的样本输入,包括上述不起作用的案例。