Regex 检测UTF-8编码文本文件中的损坏字符

Regex 检测UTF-8编码文本文件中的损坏字符,regex,encoding,awk,utf-8,scripting,Regex,Encoding,Awk,Utf 8,Scripting,我有一个用错误的字符编码编辑的文本文件,因此当我使用UTF-8打开它时,在一些字符串中有一些mojibake和损坏的字符。哪种脚本语言最能有效地检测这些损坏的字符?Perl不是一个选项。我基本上是想找到一种方法,使用脚本扫描文本文件,输出行号,并可能在发现损坏字符的地方输出偏移量。我该怎么办?我正在考虑使用AWk,但我不知道在搜索损坏的字符时使用什么正则表达式。如果能给我指出正确的方向,那就太好了 更全面的投入: 我希望脚本告诉我包含损坏字符的行号,这将是上述示例中的第五行。此外,文本文件中有不

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

更全面的投入:

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

我使用此if语句获得上述输出:

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

这将查找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

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

pythonic idea您可以编辑您的问题以显示示例输入和预期输出吗?UTF-8 Unicode损坏?使用
[\x{D800}-\x{DBFF}].[\x{110000}-\x{7FFFFFFF}]
执行查找。请参阅此unix.se问题:。我发现一个
iconv
解决方案效果很好,但是有一些BearTrap。@EdMorton我添加了一些示例输入。不幸的是,它没有按我预期的方式工作。我在这样一个if语句中使用了它:
code
if($1~/[^\x00-\x7F]/){print NR:“,$0>“output.txt”;count++;}
code
,它给出了上面的输出。无法想象为什么要这样处理脚本。别那么做。我已经更新了我的答案,以显示针对新示例输入运行的脚本。这就是你想要的吗?谢谢你的帮助。我尝试将awk命令放在if语句中的原因是,脚本必须自动运行并检查文件夹中的多个文件,而不仅仅是一个手动检查一个特定文件。您如何将awk one liner转换为可执行脚本,以检查特定文件夹中的所有文件,先生?只需将参数从
文件更改为
*