Emacs bittet mich bei jedem Speichern um ein Codierungssystem

7

Ich habe viele Textdateien (Win, Mac, Unix) in einer einzigen Orgmode-Datei zusammengefasst. Bei einigen Zeichen sah ich Zahlen anstelle der richtigen Zeichen. Dinge wie \ 314 \ 203.

Ich habe "Revert-Buffer-with-Coding-System" verwendet und utf-8-hfs-unix gewählt. Das behebt es.

Aber jetzt bittet mich Emacs jedes Mal, wenn ich speichere, ein Codierungssystem zu wählen. Wenn ich Rohtext wähle, hört es auf zu fragen, aber wenn ich die Datei wieder öffne, sind die Zahlen zurück.

Wie behebe ich das?

Jason Mirk
quelle
1
Wie wäre es mit dem Hinzufügen -*- coding: utf-8-hfs-unix;-*-in der ersten Zeile Ihrer Datei? ( Gnu.org/software/emacs/manual/html_node/emacs/... )
Jean - Pierre
das hat teilweise funktioniert. Keine Zahlen mehr. Das Problem ist, dass Emacs mich beim Speichern erneut nach einem Codierungssystem fragt. Nur wenn ich Rohtext wähle, kann ich speichern, ohne dass es mich jedes Mal fragt.
Jason Mirk
2
Könnte es sein, dass Ihre Datei Zeichen aus mehreren inkompatiblen Zeichensätzen enthält?
JeanPierre
Ich denke schon, aber wie kann ich das beheben?
Jason Mirk
1
Ich hatte in den ersten Tagen Probleme mit der Verwendung von Emacs (vor einigen Jahren), aber ich habe die Vorgehensweise im folgenden Link übernommen und habe nie zurückgeschaut - Wie setze ich Emacs zurück, um Dateien in der utf-8-Unix-Zeichencodierung zu speichern? - stackoverflow.com/a/20736147/2112489 Es ähnelt der vorherigen Antwort von elethen, hat aber einige Dinge, die ich vor einigen Jahren hinzugefügt habe. Es gibt jedoch noch einige Sonderzeichen, die eine Eingabeaufforderung auslösen. Da es so selten vorkommt, dass ich auf diese Zeichen stoße (normalerweise beim Bearbeiten einer Datei nach der optischen Zeichenerkennung), habe ich nie mehr Zeit mit dem Problem verbracht.
Lawlist

Antworten:

6

Dies passierte mir auch eine Weile, bevor ich eine Vorstellung davon hatte, was los war - hier ist ein Beispiel dafür, wie so etwas passieren kann - (wenn es darauf ankommt, bin ich unter Windows, falls es etwas Spezielles für diesen Build ist) - -

Angenommen, Sie haben eine Datei, die in UTF-8 codiert ist, und Sie fügen Text von einer Website ein, die mit der Codepage Latin-1 oder Windows-1252 codiert ist, z. B. ein O mit einem Umlaut oder geschweifte Anführungszeichen.

Jetzt haben Sie eine Folge von UTF-8-codierten Zeichen, gefolgt von etwas, das für UTF-8 entweder keinen Sinn ergibt oder möglicherweise falsch interpretiert wird. Wenn es nicht als korrekte UTF-8-Sequenz interpretiert werden kann, wird es als Rohwert angezeigt, z. B. oktal \ 326 (dies ist ein O mit einem Umlaut in der Latin-1-Codepage). Dies liegt daran, dass nach UTF-8 auf \ 326 insbesondere etwas mit einer 10 in den höchsten zwei Bits folgen soll, und wenn dies nicht der Fall ist, weiß es nicht, was es damit tun soll.

Wenn Sie beispielsweise zu https://www.gnu.org/software/emacs/manual/html_node/emacs/Intro.html#Intro gehen und Text kopieren, der geschweifte Anführungszeichen enthält, wie "Das" G "in GNU" Wenn Sie es in einen UTF-8-codierten Puffer einfügen, erhalten Sie "The \ 221G \ 222 in GNU".

Also ... was tun?

Zum einen können Sie den Puffer mit verschiedenen Codierungssystemen untersuchen, um festzustellen, ob diese Zeichen korrekt angezeigt werden, z. B. Windows-1252 und Latin-1 sind ziemlich häufig.

M-x revert-buffer-with-coding-system windows-1252 RET
M-x revert-buffer-with-coding-system latin-1 RET

Wenn das Dokument auf diese Weise besser aussieht, können Sie es mit dieser neuen Codierung speichern. Es gibt jedoch viele verschiedene Codierungssysteme.

Um es wieder auf UTF-8 zu bringen, tun Sie es einfach

M-x revert-buffer-with-coding-system utf-8 RET

Ich bin mir nicht sicher, warum dies passiert - Emacs scheint zu wissen, wie etwas in der Zwischenablage codiert wurde, und übersetzt es entsprechend, aber es scheint dies nicht zu tun.

Weitere Erklärungen finden Sie unter /programming/1543613/how-does-utf-8-variable-width-encoding-work und http://kunststube.net/encoding/ .

Brian Burns
quelle
1
Ich habe es mit Visual Studio Code geöffnet und es hat es perfekt gelesen. Gespeichert, in Emacs geöffnet. Jetzt sieht alles gut aus!
Jason Mirk
@JasonMirk Interessant - vielleicht musste man erraten, welches Codierungssystem für seltsame Zeichen verwendet werden soll, z. B. Latin-1, und sie in UTF-8 übersetzen?
Brian Burns
Ich glaube schon. Es ist alles guter Mann. Saul Goodman.
Jason Mirk
Dies ist nicht die Lösung, aber es hat zusammen mit den Kommentaren von @JeanPierre geholfen. Die Idee ist, die Datei mit der gewünschten Codierung (Alt + x Revert-Buffer-with-Coding-System) zu lesen und dann nach Nicht-ASCII-Zeichen zu suchen, um diejenigen zu filtern, die ungültig bleiben (Mx search-forward-regex [[: nonascii:]] RET).
Emagar