![为什么无法搜索以 UTF-16 编码的文本文件内容?](https://linux22.com/image/111151/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%97%A0%E6%B3%95%E6%90%9C%E7%B4%A2%E4%BB%A5%20UTF-16%20%E7%BC%96%E7%A0%81%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%EF%BC%9F.png)
据我了解,例如 catfish 和 gnome-search-utils 都可以搜索 UTF-8 编码的文件内容。为了能够在文本文件中搜索单词或数字,必须首先通过 iconv 将它们转换为 UTF-8。
如果该文件已知,则 gedit 或鼠标垫等文本编辑器可以轻松处理 UTF-16。
为什么任何 Linux 发行版都没有可以处理 UTF-16 编码的 txt 文件的搜索工具(GUI 或命令行)?
我在Xubuntu。
答案1
UTF-16(或 UCS-2)对于 C 标准库和 POSIX ABI 使用的空终止字符串非常不友好。例如,命令行参数以 NUL(值为零的字节)终止,并且任何数值 < 256 的 UTF-16 字符都包含零字节,因此任何常见英文字母的字符串都无法用 UTF-16 表示在命令行参数上。
这反过来意味着实用程序需要以其他格式(例如 UTF-8)输入并转换为 UTF-16;或者或者他们需要以其他方式获取他们的意见。第一个选项要求所有此类实用程序包含(或链接到)用于转换的代码,而第二个选项将使这些程序与其他实用程序的接口变得有些困难。
考虑到这些困难,以及 UTF-8 具有更好的向后兼容性的事实,我猜想很少有人愿意使用 UTF-16,从而有动力为此创建工具。
答案2
安装ripgrep
公用事业支持UTF-16。
例如:
rg pattern filename
ripgrep 支持搜索 UTF-8 以外的文本编码的文件,例如 UTF-16、latin-1、GBK、EUC-JP、Shift_JIS 等。 (提供了对自动检测 UTF-16 的一些支持。其他文本编码必须使用
-E
/专门指定--encoding flag.
)