複数のエンコードが混在するテキスト ファイルを単一のエンコードに変換するにはどうすればよいですか?

複数のエンコードが混在するテキスト ファイルを単一のエンコードに変換するにはどうすればよいですか?
  1. さまざまなソース (Web ページ、他のテキスト ファイル、PDF ファイル) からテキスト ファイルのさまざまな部分をコピーして gedit に保存し、ファイルに保存しました。テキスト ファイルに複数のエンコードが含まれているのはそのためだと思いますが、よくわかりません。さまざまなソースからテキスト ファイルのさまざまな部分を gedit にコピーして、エンコードが混在したテキスト ファイルを作成しないようにするにはどうすればよいですか?
  2. gedit でファイルを開くと、gedit は常にテキストのすべての部分を正しく表示またはデコードできます。gedit はエンコーディングが混在したテキスト ファイルを処理できるようですが、確信はありません。

    しかし、emacs でファイルを開くと、正しく表示されない文字があります。(emacs でそれができない理由はわかりません。) そのため、混合エンコーディングから utf-8 などの単一のエンコーディングにファイルを変換したいと思います。

    gedit はテキスト ファイルのさまざまな部分の正しいエンコーディングを検出できると思いますが、それができる他のアプリケーションがあるかどうかはわかりません。gedit にファイルを utf-8 に変換するように依頼したり、少なくともファイルのどの部分でどのエンコーディングが見つかったかを教えてもらうことは可能でしょうか。

ありがとう。

答え1

うーん... 正直言って、さまざまなエンコードのファイルの概念はやや不安定です。少し時間があれば、この記事(そしてこれです)は読む価値があります。

Linux では、ファイルはバイトのシーケンスです。プログラムにそれをテキスト ファイルとして解釈するように指示すると、バイトと文字のマッピングを使用して解釈します。このマッピングがエンコーディングです。私が知っているほとんどすべてのテキスト エディター (ワード プロセッサではありません!) は、1 つのファイルに 1 つのエンコーディングという概念を理解しています。

私は専門家ではないのでgedit、行ごとまたはテキストブロックごとにエンコーディングを自動検出しようとするような魔法が働いているのかもしれません...もしそうなら、同じことを試してください。enca(1):

 while read line; do echo $line | enconv -L none -x utf8; done < text.mixed > text.utf8

...ただし、enca がエンコードを推測する精度に依存します (たとえば、Eastern European ではほぼ正常に動作しますが、Latin1 では動作しません)。

(1) リポジトリにあるので、 を使ってインストールするだけですsudo apt-get enca

答え2

私も同じ問題を抱えていましたが、Emacsで解決しました。解決策は以下から引用しました。ここ:

もう 1 つの解決策としては、中国語の文字が表示されている各領域をマークし、Mx recode-region を使用して再コード化し、「テキストは実際には」を utf-16-le として、「ただし、次のように解釈されました」を utf-16-be として指定することです。

もう 1 つの方法は、異なるエンコーディングを持つ 2 つの部分を分割し、それらを別のファイルにコピーし、一方のエンコーディングを変換してもう一方に追加することです。私の場合、これは Atom では機能しましたが、Notepad++ (utf16-le/be) では機能しませんでした。

関連情報