Wie zeige ich Unicode UTF-8 als Unicode an?


12

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:

Bildbeschreibung hier eingeben

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-systemund utf-8die 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.


Emacs erkennt die Datei nicht als UTF-8. Was ist der Inhalt Ihrer Init-Datei? Welche Emacs-Version verwenden Sie? Ändert es etwas, wenn Sie Emacs mit emacs -qoder starten emacs -Q?
Gilles 'SO- hör auf böse zu sein'

Ich habe kein Problem mit anderen UTF-8-Dateien. Ich verwende GNU Emacs 24.4.4. Kein Unterschied mit emacs -qoder emacs -Q.
NVaughan

Ah, wenn es mit anderen Dateien und in einer unberührten Konfiguration funktioniert, liegt das wahrscheinlich daran, dass die Datei auch irgendwo ungültiges UTF-8 enthält. Lassen Sie mich sehen, wie ich es Emacs erzähle ...
Gilles 'SO - hör auf, böse zu sein'

möglicherweise verbunden: emacs.stackexchange.com/q/4100/2264
Sean Allred

Antworten:


10

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 eingeben utf-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-glyphnach 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 Sie C-M-s( isearch-regexp) ausführen und suchen

[^^@-~[:multibyte:]]

wo ^@wird durch Eingabe eingegeben C-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, aber Local Variables:und End:muss erscheint genau so mit dem folgenden Doppelpunkt):

# Local Variables:
# coding: utf-8
# End:

Emacs wählt die Codierung, nach der Dateien interpretiert werden, basierend auf mehreren Einstellungen, hauptsächlich Sprachumgebungen und den Variablen auto-coding-alistund auto-coding-regexp-alist. Da Sie das gleiche Problem mit dieser Datei haben, auch wenn sie ausgeführt wird emacs -Q, ist dies meines Erachtens kein Problem mit diesen Einstellungen, sondern mit dem Dateiinhalt.


Wenn ich die Datei ohne das Codierungssystem Dateivariable öffnen (dh wenn die Datei wird falsch) und führen Sie die regex Suche, alle meinen \342, \200, \230etc. ausgewählt bekommen. Aber wenn ich es "richtig" öffne (mit der Codierungsvariablen), erscheinen keine Suchergebnisse.
NVaughan

@NVaughan Hmmm. Dann verstehe ich nicht, warum diese Datei nicht als UTF-8 erkannt wird, wenn andere (vor allem unter emacs -Q) sind.
Gilles 'SO - hör auf böse zu sein'

1

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.


-1

Nur für UNIX-ähnliche Systeme.

In vielen Fällen die einfache Codierungsdefinition in ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

erreicht mit

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

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.


Obwohl das, was Sie sagen, nützlich sein kann, scheint dies diese Frage nicht zu beantworten, da das Problem nur bei einigen utf-8-Dateien auftrat.
JeanPierre

Angenommen, nach der strengen Kodierungsdefinition in Konfigurationsdateien könnte dieses Problem für alle Dateien für immer enden :-)
Alioth
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.