哪些工具可以在包含任何形式规范化的文件中找到 unicode (UTF-8) 文本?

哪些工具可以在包含任何形式规范化的文件中找到 unicode (UTF-8) 文本?

我喜欢在文件中查找国际文本,例如“müller”,甚至中文文本,无论使用哪种 unicode 表示形式和大小写。

即,“ü”是否以NFC或NFD格式存储并不重要。

我认为 grep 可以做到这一点,但至少 macOS 10.13.6 上可用的版本只能找到一种规范化形式。

我预计,使用 Aho–Corasick 等可以搜索单词中字母替代形式的算法,构建包含 UTF8 字符的每种替代形式的树​​,然后搜索所有组合应该不会那么困难。然而,至少我尝试过的 grep 并没有这样做。

是否有 grep 或其他文本查找工具的实现可以正确执行此操作?

答案1

我用正则表达式引擎(PCRE2)解决了这个问题。

基本上,我使用自己编写的代码将用户的搜索字符串转换为所有可能的 UTF-8 和 UTF-16 表示形式,然后将它们全部组合成一个正则表达式作为替代方案,并根据需要注意转义任何字符(例如,00UTF-16 字符的字节被编码为\x00)。

正则表达式构建决策树的性质使得搜索速度相当快。

这让我可以扫描任何二进制文件中的搜索字符串,无论它在文件中以哪种格式编码。

由于我在自己的一个程序中需要此功能,因此我应该提到编程解决方案也很受欢迎(然后它最好属于 StackOverflow 站点)。

相关内容