搜索非ASCII字符的文档

13

我的电脑上有一个应用程序需要读取文本文件。我有几个文件,其中一个无法使用;该程序无法读取它并告诉我其中存在不良字符。我的第一个猜测是其中有非ASCII字符,但我不知道如何找到它。Perl或任何通用的正则表达式都可以。有什么想法吗?


你到目前为止尝试了什么? - nmagerko
我相信你可以在这里找到答案:https://dev59.com/H0fRa4cB1Zd3GeqP-6Uz? - Neilos
1
我接受了数学咖啡,因为它非常简单易懂——在Notepad++中完成。 - Nate Glenn
3个回答

12
您可以使用[^\x20-\x7E]匹配非ASCII字符。
例如:grep -P '[^\x20-\x7E]' suspicious_file

3
我在使用它时遇到了问题,因为它也会识别文件中所有的行尾字符。但是将你的答案与Ruakh的答案结合起来,效果非常好: [^\t\n\r\x20-\x7E] - JMM
在我的情况下,另一个问题的答案更好:[\xE0-\xFF] - koppor

4
perl -wne 'printf "byte %02X in line $.\n", ord $& while s/[^\t\n\x20-\x7E]//;'

将会找到所有非ASCII字符、制表符、空格或换行符。

如果它在正常文件中报告了0D(回车符),那么请将\t\n更改为\t\n\r

如果它只在错误的文件中报告0D,那么您可以通过运行dos2unix来修复这些文件。


只是一个补充,应该将输入作为最终未列出的参数运行。 - josh.chavanne
好的,谢谢!我必须稍微更改一下以适应DOS控制台: perl -wne "printf qq(byte %02X in line $.\n), ord $& while s/[^\t\n\x20-\x7E]//;" <test.txt - rplantiko

2
如果您在源代码中也使用制表符,请尝试使用以下模式:
[^\x08-\x7E]

也适用于Notepad++


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接