非常有趣的错误。
这个问题让我在 XP 和 Win 7 上做了一些实验——行为是不同的。
经验值
ANSI - FIND 无法在单行上读取超过 1023 个字符(1023 个字节)。FIND 可以匹配超过 1023 个字符的行,只要搜索字符串在第 1024 个之前匹配。匹配的行打印输出在 1023 个字符后被截断。
Unicode - FIND 无法在一行中读取超过 1024 个字符(2048 个字节)。FIND 可以匹配超过 1024 个字符的行,只要搜索字符串在第 1025 个之前匹配。匹配的行打印输出在 1024 个字符后被截断。
我觉得很奇怪,XP 上 Unicode 和 ANSI 的行限制不是相同的字节数,也不是简单的倍数。以字节表示的 Unicode 限制是 ANSI 限制的 2 倍加 1。
注意:匹配长行的截断也会截断换行符,因此下一个匹配行看起来会附加到上一行。如果您使用 /N 选项,您可以判断它是一个新行。
窗口 7
ANSI - 我没有找到可以搜索的最大行长度的限制(尽管我没有很努力地尝试)。任何超过 4095 个字符(4095 个字节)的匹配行在 4095 个字符后被截断。FIND 可以成功搜索一行中超过 4095 个字符,只是无法显示所有字符。
Unicode - 我没有找到可以搜索的最大行长度的限制(尽管我没有很努力地尝试)。任何超过 2047 个字符(4094 个字节)的匹配行在 2047 个字符后被截断。FIND 可以成功搜索一行超过 2047 个字符,只是无法显示所有字符。
由于 Unicode 字节长度始终是 2 的倍数,并且最大 ANSI 可显示长度是奇数,因此 Unicode 的最大可显示行长度(以字节为单位)比 ANSI 小一是有意义的。
但是还有奇怪的 Unicode 错误。如果 Unicode 文件长度是 4096 字节的整数倍,则无法搜索或打印最后一个字符。文件包含单行还是多行都没有关系。它仅取决于总文件长度。
我发现有趣的是 4096 错误的倍数在最大可打印行长度(以字节为单位)之一之内。但我不知道这些行为之间是否有关系,或者仅仅是巧合。
注意:匹配长行的截断也会截断任何换行符,因此下一个匹配行看起来会附加到前一行。如果您使用 /N 选项,您可以判断它是一个新行。