为什么无法搜索以 UTF-16 编码的文本文件内容?

为什么无法搜索以 UTF-16 编码的文本文件内容?

据我了解,例如 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.

相关内容