【问题标题】:search document for non-ascii搜索非 ascii 文档
【发布时间】:2012-01-13 02:58:17
【问题描述】:

我电脑上的一个应用程序需要读入一个文本文件。我有几个,一个不起作用;该程序无法读取它并告诉我它的某个地方有一个坏字符。我的第一个猜测是那里有一个非ASCII字符,但我不知道如何找到它。 Perl 或任何通用正则表达式都会很好。有什么想法吗?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 相信你能找到答案here?
  • 我接受了数学咖啡,因为它在 Notepad++ 中超级简单

标签: regex perl ascii character


【解决方案1】:

您可以使用[^\x20-\x7E] 来匹配非ASCII 字符。

例如grep -P '[^\x20-\x7E]' suspicious_file

【讨论】:

  • 我在使用它时遇到了问题,因为它还会识别我文件中的所有行尾字符。将您的答案与 Ruakh 的答案结合起来就像一个魅力:[^\t\n\r\x20-\x7E]
  • 就我而言,answer from the other question 更好:[\xE0-\xFF]
【解决方案2】:
perl -wne 'printf "byte %02X in line $.\n", ord $& while s/[^\t\n\x20-\x7E]//;'

将查找不是 ASCII 字形字符、制表符、空格或换行符的每个字符。

如果它在正常的文件中报告0Ds(回车),则将\t\n 更改为\t\n\r

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

【讨论】:

  • 只是一个附录,应该将输入作为最终未列出的参数运行。
  • 这样,谢谢!我不得不为 DOS 控制台稍微改变它:perl -wne "printf qq(byte %02X in line $.\n), ord $& while s/[^\t\n\x20-\x7E]//;" <test.txt
【解决方案3】:

如果您也在源代码中使用制表符,请尝试以下模式:

[^\x08-\x7E]

也适用于记事本++

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 2011-11-04
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多