So ändern Sie Oktalsequenzen in utf-8-Text


9

Wenn ich Nicht-ASCII-Text aus Windows kopiere und in Emacs einfüge, wird er als oktale Sequenz angezeigt. Wenn ich beispielsweise ä in Emacs einfüge, wird es als \ 344 angezeigt.

Ich könnte Cq 344 eingeben, um das ä in Emacs zurückzubekommen. Das ist ärgerlich, aber es ist erträglich, wenn es nur einen Charakter gibt. Wenn jedoch viele Zeichen in oktale Escape-Sequenzen umgewandelt werden, ist es praktisch, einen Befehl für eine Region auszuführen, um alles darin zu konvertieren. Gibt es schon so einen Befehl? Wenn nicht, wie würden Sie eine Funktion schreiben, um dies zu tun?

[Ich habe mein Standardcodierungssystem in meiner .emacs-Datei auf utf-8 gesetzt und verwende dieselbe .emacs-Datei unter Windows und Linux. Das Problem tritt jedoch nur beim Kopieren von einer Windows-Anwendung in Emacs auf. Das Kopieren von Emacs in eine andere Windows-Anwendung funktioniert einwandfrei.]


1
Ich denke, was Sie wollen, ist revert-buffer-with-coding-system(siehe Dokumentation). Emacs zeigt die Zeichen auf diese Weise an, weil Sie sie aus einer Umgebung kopiert haben, die sich in einem anderen Codierungssystem befand (vorausgesetzt, ANSI mit sogenannten hohen ASCII-Zeichen, die zum Rendern von Latein mit diakritischen Zeichen verwendet werden), aber Ihr Puffer muss so etwas wie UTF-8 (für welche ASCII-Zeichen mit hohen Bits keine Bedeutung haben, dh ungültig sind).
wvxvw

1
Oder vielleicht sogar set-clipboard-coding-system. Versuchen Sie herauszufinden C-h a coding-system, welche anderen Funktionen in dieser Gruppe verfügbar sind.
wvxvw

Das angezeigte \ 344 ist das Ergebnis eines Konfigurationsproblems. Anstatt zu befehlen, es nachträglich zu "reparieren", sollten Sie untersuchen, warum Sie es überhaupt erhalten. Beginnen emacs -QSie zB mit und wenn Sie das Problem dort bereits sehen , M-x report-emacs-bug.
Stefan

@Stefan Manchmal ist "warum du es bekommst" offensichtlich, aber das hilft dir nicht, es nachträglich zu reparieren. Zum Beispiel hatte ich gerade dieses Problem als Folge von insert-file-literally(und es war zu spät, um die Datei entweder rückgängig zu machen oder zu löschen / wieder einzufügen).
T. Verron

@Stefan Es kann so viele Fehlkonfigurationen außerhalb von Emacs geben, die dazu führen können, um nur einige zu nennen: Jemand hat die Stückliste in einer Datei gespeichert, die ursprünglich in einer cp-12XX-Einzelbyte-Codierung enthalten war, was den Quellcode-Editor verwirrte, aus dem der Text kopiert wurde. Der Quellcode-Editor hat die Art des Inhalts in der Zwischenablage usw. falsch gemeldet. Ich habe dies häufig gesehen, als ich einige alte ASP-Quellen bearbeitet habe, die ursprünglich falsch codiert waren.
wvxvw

Antworten:


4

Es stellte sich heraus, dass der beleidigende Teil meiner .emacs-Datei war (set-selection-coding-system 'utf-8). Nachdem ich diese Zeile entfernt hatte, verhielt sich Emacs wie erwartet.


2

Einmal gemacht:

(defun umlaute ()
  "Fix wrongly inserted characters, commonly from pasting. "
  (interactive "*")
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\344\\|"(list 228)) nil 1)
      (replace-match "ä"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\304\\|"(list 196)) nil t 1)
      (replace-match "Ä"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\366\\|"(list 246)) nil t 1)
      (replace-match "ö"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\326\\|"(list 214)) nil t 1)
      (replace-match "Ö"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\374\\|"(list 252)) nil t 1)
      (replace-match "ü"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\334\\|"(list 220)) nil t 1)
      (replace-match "Ü"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\337\\|"(list 223)) nil t 1)
      (replace-match "ß"))
    (goto-char (point-min))
    (while (re-search-forward "\\\201" nil t 1)
      (replace-match ""))))

von misc-utils.el unter https://launchpad.net/sx-emacs-werkstatt

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.