web-dev-qa-db-ja.com

UTF-16でエンコードされたテキストファイルの内容を検索できないのはなぜですか?

私はそれを理解しています。 catfishとgnome-search-utilsはどちらも、UTF-8でエンコードされたファイルコンテンツ内を検索できます。テキストファイル内の単語や数字を検索できるようにするには、最初にiconvを介してUTF-8に変換する必要があります。

ファイルがわかっている場合、geditやマウスパッドなどのテキストエディタはUTF-16で問題ありません。

UTF-16でエンコードされたtxtファイルを処理できるLinuxディストリビューションのいずれかに検索ツール(GUIまたはコマンドライン)がないのはなぜですか?

私はXubuntuにいます。

3
Enteneller

UTF-16(またはUCS-2)は、C標準ライブラリおよびPOSIXABIで使用されるヌル終了文字列には非常に適していません。たとえば、コマンドライン引数はNUL(値がゼロのバイト)で終了し、数値が256未満のUTF-16文字にはゼロバイトが含まれるため、通常の英字の文字列をUTF-16で表すことはできません。コマンドライン引数。

つまり、いずれかのユーティリティが他の形式(UTF-8など)で入力を受け取り、UTF-16に変換する必要があるということです。または、他の方法で入力を受け取る必要があります。最初のオプションでは、そのようなすべてのユーティリティに変換用のコードを含める(またはリンクする)必要があり、2番目のオプションでは、これらのプログラムを他のユーティリティに接続するのがやや困難になります。

これらの困難と、UTF-8の下位互換性が優れているという事実を考えると、そのためのツールを作成する動機付けとなるほどUTF-16を使用することを気にする人はほとんどいないと思います。

6
ilkkachu

インストール ripgrepユーティリティ UTF-16をサポートします。

例えば:

rg pattern filename

ripgrepは、UTF-16、latin-1、GBK、EUC-JP、Shift_JISなどのUTF-8以外のテキストエンコーディングでのファイルの検索をサポートしています。 (UTF-16を自動的に検出するためのサポートがいくつか提供されています。他のテキストエンコーディングは、-E/--encoding flag.で具体的に指定する必要があります)

2
kenorb