Come cambiare le sequenze ottali in testo utf-8


9

Quando copio testo non ascii da Windows e lo incollo in Emacs, viene visualizzato come una sequenza ottale. Ad esempio, se incollo ä in Emacs, viene visualizzato come \ 344.

Potrei digitare Cq 344 per ripristinare ä in Emacs. È fastidioso, ma è tollerabile se c'è solo un personaggio. Ma se ci sono molti personaggi trasformati in sequenze di escape ottali, sarebbe conveniente eseguire un comando su una regione per convertire tutto all'interno. Esiste già un tale comando? In caso contrario, come scriveresti una funzione per farlo?

[Ho impostato il mio sistema di codifica predefinito su utf-8 nel mio file .emacs e utilizzo lo stesso file .emacs su Windows e Linux. Ma il problema si verifica solo quando si copia da un'applicazione Windows in Emacs. La copia da Emacs a un'altra applicazione Windows funziona correttamente.]


1
Penso che quello che vuoi sia revert-buffer-with-coding-system(vedi la sua documentazione). Emacs mostra i caratteri in questo modo perché li hai copiati da un ambiente che si trovava in un sistema di codifica diverso (supponendo ANSI con i cosiddetti caratteri ASCII alti usati per rendere il latino con segni diacritici), ma il tuo buffer deve usare qualcosa come UTF-8 (per quali caratteri ASCII con bit alti impostati non hanno significato, cioè non sono validi).
wvxvw,

1
O forse anche set-clipboard-coding-system. Prova C-h a coding-systema vedere quali altre funzioni in questo gruppo sono disponibili.
wvxvw,

Il \ 344 che vedi è il risultato di un problema di configurazione. Piuttosto che un comando per "risolverlo" dopo il fatto, dovresti esaminare perché lo ottieni in primo luogo. Ad esempio, iniziare con emacs -Qe se si vede il problema già lì, M-x report-emacs-bug.
Stefan,

@Stefan A volte, "perché lo ottieni" è ovvio, ma ciò non ti aiuterà a risolverlo dopo il fatto. Ad esempio, ho appena avuto questo problema a causa di insert-file-literally(ed era troppo tardi per annullare o eliminare / reinserire il file).
T. Verron,

@Stefan potrebbero esserci così tante configurazioni errate al di fuori di Emacs che possono causare questo, solo per citarne alcuni: qualcuno ha salvato la BOM in un file che era originariamente in una codifica a byte singolo cp-12XX, che confondeva l'editor di origine da cui era stato copiato il testo, l'editor delle fonti riportava erroneamente il tipo di contenuto negli appunti, ecc. Lo vedevo molto quando modificavo alcune antiche fonti ASP che erano originariamente erroneamente codificate.
wvxvw,

Risposte:


4

Si scopre che la parte offensiva del mio file .emacs era (set-selection-coding-system 'utf-8). Una volta rimossa quella linea, Emacs si è comportato come previsto.


2

Una volta fatto questo:

(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 ""))))

da misc-utils.el su https://launchpad.net/sx-emacs-werkstatt

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.