批量搜索文本文件中的unicode字符串

时间:2017-09-19 15:02:35

标签: batch-file unicode

我正在尝试在文本文件中查找unicode字符串。当我搜索普通字符时,我的程序工作正常,但现在我不知道如何使用UTF-8。

这就是我对我的程序所做的事情:

    FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"hallo" "%%a"...

这就是我现在要做的事情:

    FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"привет" "%%a"
希望有人可以帮助我:)。

1 个答案:

答案 0 :(得分:0)

FINDSTR无法正确读取或搜索任何形式的unicode。它仅适用于单字节ANSI(扩展ASCII)编码。

但是可以将您的UTF-8文件视为扩展ASCII并完成搜索,但它不会将结果正确打印到控制台。

诀窍是将搜索字符串放在另一个UTF-8文件中。对于这个例子,假设搜索字符串存储在带有UTF-8编码的“find.txt”中(没有BOM)。

for %%a in ("\\%ip%\Print\*.txt") do findstr /g:find.txt "%%a"

FINDSTR不会理解多字节unicode代码点,而是将每个字节解释为字符。任何多字节unicode代码点都将错误地打印到控制台,但将打印正确的匹配行。

如果将输出重定向到文件,则生成的文件将具有正确的UTF-8编码。

请注意,您必须使用/G:file选项。您不能使用/C:"string"选项,因为FINDSTR不正确地解释包含高于0x80的字节值的命令行参数。有关详细信息,请参阅What are the undocumented features and limitations of the Windows FINDSTR command?处标题为命令行参数的字符限制 - 扩展ASCII转换的部分。