Wie konvertiere ich eine Textdatei mit verschiedenen Kodierungen in eine einzige Kodierung?

Wie konvertiere ich eine Textdatei mit verschiedenen Kodierungen in eine einzige Kodierung?
  1. Ich habe eine Textdatei erstellt, indem ich verschiedene Teile aus verschiedenen Quellen (Webseiten, andere Textdateien, PDF-Dateien) in gedit kopiert und in der Datei gespeichert habe. Ich vermute, das ist der Grund, warum ich mehrere Kodierungen in der Textdatei habe, aber ich bin mir nicht sicher. Wie kann ich vermeiden, eine Textdatei mit gemischten Kodierungen zu erstellen, indem ich verschiedene Teile aus verschiedenen Quellen in gedit kopiere?
  2. Wenn ich die Datei in gedit öffne, kann gedit immer jeden Teil des Textes korrekt anzeigen oder dekodieren. Es scheint, dass gedit eine Textdatei mit gemischten Kodierungen verarbeiten kann, aber ich bin nicht sicher.

    Aber wenn ich die Datei in Emacs öffne, gibt es Zeichen, die nicht richtig angezeigt werden können. (Ich bin nicht sicher, warum Emacs das nicht kann.) Daher möchte ich die Datei von gemischten Kodierungen in eine einzelne Kodierung wie UTF-8 konvertieren.

    Da ich glaube, dass gedit die richtigen Kodierungen für verschiedene Teile der Textdatei erkennen kann, und ich nicht weiß, ob es andere Anwendungen gibt, die dazu in der Lage sind, wäre es möglich, gedit aufzufordern, die Datei in UTF-8 zu konvertieren oder mir zumindest mitzuteilen, welche Kodierung es für welchen Teil der Datei findet?

Danke.

Antwort1

Hmmm... das Konzept einer Datei mit verschiedenen Kodierungen ist, ehrlich gesagt, etwas wackelig. Wenn du ein bisschen Zeit hast,Dieser Artikel(UndDieses hier) sind lesenswert.

Unter Linux ist eine Datei eine Folge von Bytes. Wenn Sie ein Programm bitten, sie als Textdatei zu interpretieren, wird es dies mithilfe einer Zuordnung zwischen Bytes und Zeichen tun; diese Zuordnung ist die Kodierung. Fast alle Texteditoren, die ich kenne (keine Textverarbeitungsprogramme!), verstehen einfach das Konzept einer Kodierung für eine Datei.

Ich bin kein Experte für gedit; vielleicht macht es etwas Zauberhaftes, wie den Versuch, die Kodierung Zeile für Zeile oder Textblock für Textblock automatisch zu erkennen... wenn das der Fall ist, können Sie versuchen, dasselbe mit zu tunenca(1):

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

... aber es hängt davon ab, wie gut Enca Ihre Kodierung erraten kann (funktioniert fast gut mit Osteuropäisch, aber beispielsweise nicht mit Latin1).

(1) Es ist in den Repos, installieren Sie es einfach mit sudo apt-get enca.

Antwort2

Ich hatte das gleiche Problem und habe es mit Emacs gelöst. Die Lösung ist zitiert ausHier:

Eine weitere mögliche Lösung besteht darin, jeden erscheinenden Bereich mit chinesischen Zeichen zu markieren und ihn mit Mx recode-region neu zu kodieren, wodurch „Text war tatsächlich in“ als utf-16-le und „Wurde aber interpretiert als“ als utf-16-be ausgegeben wird.

Eine andere Möglichkeit besteht darin, die beiden Teile mit unterschiedlicher Kodierung aufzuteilen, sie in verschiedene Dateien zu kopieren, die Kodierung des einen zu konvertieren und sie dem anderen hinzuzufügen. In meinem Fall hat dies mit Atom funktioniert, aber nicht mit Notepad++ (utf16-le/be).

verwandte Informationen