Ich habe einige UTF-8-codierte Textdateien, die in Emacs seltsame Escape-Codes anzeigen. Zum Beispiel dieser Text:
In diesem Fall handelt es sich um die Bezeichnung „Deus“. secundo, replyebo ad quaestionem.
Shows wie dieses in Emacs:
Dies passiert nur in Emacs. Andere Editoren zeigen den Text korrekt an. Wie kann ich dieses Problem beheben?
Update 1
Wenn ich anrufe revert-buffer-with-coding-system
und utf-8
die Datei auswähle , wird sie korrekt gelesen. Wie Gilles richtig vermutet hat, erkennt Emacs die Dateicodierung nicht. Wenn ich den Code ; -*- coding: utf-8 -*-
zur Datei hinzufüge , wird Emacs geöffnet und korrekt angezeigt.
Update 2
Ich habe die Datei in "UTF-8 mit Stücklistenkodierung" neu kodiert und jetzt wird sie in Emacs in Ordnung angezeigt. Ich weiß nicht, was der Unterschied zwischen den beiden Typen ist, aber Emacs scheint nur den BOM-Typ zu kennen.
quelle
emacs -q
oder startenemacs -Q
?emacs -q
oderemacs -Q
.Antworten:
Aus irgendeinem Grund erkennt Emacs die Datei nicht als UTF-8. Sie können Emacs zwingen, die Datei als UTF-8 erneut zu öffnen, indem Sie den Befehl
C-x RET r
(revert-buffer-with-coding-system
) ausführen und eingebenutf-8
.Der Grund, warum Emacs diese Datei nicht als UTF-8 erkannt hat (aber andere erkennt), ist wahrscheinlich, dass sie eine ungültige UTF-8-Sequenz enthält. Diese Sequenz wird
escape-glyph
nach der Neuinterpretation der Datei als UTF-8 weiterhin als Backslash gefolgt von drei Oktalziffern mit einer anderen Farbe (dem Gesicht) angezeigt. Sie können nach einer solchen Sequenz suchen, indem SieC-M-s
(isearch-regexp
) ausführen und suchenwo
^@
wird durch Eingabe eingegebenC-q C-SPC
(es ist das Zeichen ^ @ = 0, nicht die zweistellige Folge circumflex-at; das Zeichen davor ist das Zirkumflex-Zeichen).Sie können Emacs zwingen , die Datei als UTF-8 durch Hinzufügen eines zu erkennen Codierungssystem Dateivariable : put so etwas wie
-*-coding: utf-8-*-
in der ersten Zeile, oder geben Sie etwas wie dies am Ende der Datei (Sie ersetzen#
durch ein beliebiges Präfix, aberLocal Variables:
undEnd:
muss erscheint genau so mit dem folgenden Doppelpunkt):Emacs wählt die Codierung, nach der Dateien interpretiert werden, basierend auf mehreren Einstellungen, hauptsächlich Sprachumgebungen und den Variablen
auto-coding-alist
undauto-coding-regexp-alist
. Da Sie das gleiche Problem mit dieser Datei haben, auch wenn sie ausgeführt wirdemacs -Q
, ist dies meines Erachtens kein Problem mit diesen Einstellungen, sondern mit dem Dateiinhalt.quelle
\342
,\200
,\230
etc. ausgewählt bekommen. Aber wenn ich es "richtig" öffne (mit der Codierungsvariablen), erscheinen keine Suchergebnisse.emacs -Q
) sind.Es ist spät, die Frage zur Stückliste zu beantworten, aber ich werde es trotzdem tun.
Die Byte Order Mark (BOM) ist eine Folge von drei Bytes \ xef \ xbb \ xbf, die am Anfang einer Datei Systeme und Anwendungen darauf hinweist, dass der Inhalt als UTF-8 codiert ist. Richtigerweise handelt es sich um Metadaten, die nicht als Teil des Inhalts behandelt werden.
Die meisten Anwendungen - Emacs ist eine davon - berücksichtigen die Stückliste und schreiben alle UTF-8-Dateien damit. Andere Anwendungen können es beim Lesen beachten, aber nicht schreiben. und andere wissen nichts davon und geben möglicherweise eine Fehlermeldung aus, wenn sie darauf stoßen. Mit anderen Worten, die Situation ist chaotisch. Ich bevorzuge es, wo immer es möglich ist.
quelle
Nur für UNIX-ähnliche Systeme.
In vielen Fällen die einfache Codierungsdefinition in ~ / .bashrc ~ / bash_profile
erreicht mit
in ~ / .profile sollte Ihr Problem lösen.
PS Nach diesen Korrekturen müssen Sie sich in Ihrer Sitzung NEU ANMELDEN, damit die Änderungen sichtbar werden.
quelle