Як змінити восьмеричні послідовності на текст utf-8


9

Коли я копіюю текст не-ascii з Windows і вставляю в Emacs, він відображається у вигляді восьмеричної послідовності. Наприклад, якщо я вставити ä в Emacs, він відображається як \ 344.

Я міг би набрати Cq 344, щоб повернути ä назад в Emacs. Це дратує, але допустимо, якщо є лише один персонаж. Але якщо є багато символів, перетворених у восьмеричні послідовності втечі, було б зручно виконати якусь команду в регіоні, щоб перетворити все всередині. Чи вже є така команда? Якщо ні, то як би ви написали функцію для цього?

[Я встановив мою систему кодування за замовчуванням у utf-8 у моєму файлі .emacs, і я використовую той самий файл .emacs у Windows та Linux. Але проблема трапляється лише при копіюванні з програми Windows в Emacs. Копіювання з Emacs в інший додаток Windows працює чудово.]


1
Я думаю, що те, що ви хочете, є revert-buffer-with-coding-system(див. Це документація). Emacs показує символи таким чином, оскільки ви скопіювали їх із середовища, яке знаходилось в іншій системі кодування (якщо припустити, ANSI із так званими високими символами ASCII, що використовуються для перекладу латиниці з діакритикою), але ваш буфер повинен використовувати щось на зразок UTF-8 (для які символи ASCII з набором високих бітів не мають значення, тобто недійсні).
wvxvw

1
Або, може, навіть set-clipboard-coding-system. Спробуйте C-h a coding-systemпобачити, які інші функції цієї групи доступні.
wvxvw

\ 344, який ви бачите, є результатом проблеми з конфігурацією. Замість команди «виправити» це після факту, слід дослідити, чому ви отримуєте це в першу чергу. Наприклад , почати з , emacs -Qі якщо ви бачите проблему там вже M-x report-emacs-bug.
Стефан

@Stefan Іноді "чому ти його отримуєш" очевидно, але це не допоможе тобі виправити це після факту. Наприклад, у мене щойно виникла ця проблема в результаті insert-file-literally(і було вже пізно відмінити або видалити / повторно вставити файл).
Т. Веррон

@Stefan може бути стільки неправильних конфігурацій поза Emacs, що можуть спричинити це, щоб назвати декілька: хтось врятував BOM у файл, який був спочатку в одній байтовій кодуванні cp-12XX, що заплутало редактор джерел, з якого скопійовано текст, редактор джерела помилково повідомив про тип вмісту в буфері обміну тощо. Я часто бачив це під час редагування деяких стародавніх джерел ASP, які спочатку були неправильно закодовані.
wvxvw

Відповіді:


4

Виявляється, ображаюча частина мого файлу .emacs була (set-selection-coding-system 'utf-8). Після того, як я зняв цю лінію, Emacs поводився так, як очікувалося.


2

Після цього зробив:

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

від misc-utils.el на https://launchpad.net/sx-emacs-werkstatt

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.