我正在尝试在文本文件中查找unicode字符串。当我搜索普通字符时,我的程序工作正常,但现在我不知道如何使用UTF-8。
这就是我对我的程序所做的事情:
FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"hallo" "%%a"...
这就是我现在要做的事情:
FOR %%a IN (\\%ip%\Print\*.txt) DO (findstr /c:"привет" "%%a"
希望有人可以帮助我:)。
答案 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转换的部分。