如何将八进制序列更改为utf-8文本


9

当我从Windows复制非ascii文本并将其粘贴到Emacs时,它显示为八进制序列。例如,如果我将ä粘贴到Emacs中,它将显示为\ 344。

我可以键入Cq 344将ä返回Emacs。这很烦人,但只有一个字符是可以忍受的。但是,如果有许多字符转换为八进制转义序列,则在区域上运行某些命令以转换内部的所有内容将很方便。已经有这样的命令了吗?如果没有,您将如何编写函数来实现?

[我在.emacs文件中将默认编码系统设置为utf-8,并且在Windows和Linux上使用相同的.emacs文件。但是,仅当从Windows应用程序复制到Emacs时才会发生问题。从Emacs复制到另一个Windows应用程序效果很好。]


1
我认为您想要的是revert-buffer-with-coding-system(请参阅文档)。Emacs以这种方式显示字符是因为您是从不同编码系统中的环境中复制它们的(假设ANSI具有所谓的高ASCII字符,用于用变音符号呈现拉丁语),但是您的缓冲区必须使用类似UTF-8的字符(对于设置高位的ASCII字符没有意义,即无效)。
wvxvw 2014年

1
或者,甚至set-clipboard-coding-system。尝试C-h a coding-system查看该组中还有哪些其他功能。
wvxvw 2014年

您看到的\ 344是配置问题的结果。而不是在事实发生后对其进行“修复”的命令,您应该研究为什么首先获得它。例如,从开始,emacs -Q如果您已经看到问题了,M-x report-emacs-bug
Stefan 2014年

@Stefan有时,“为什么要得到它”很明显,但这并不能帮助您在事后解决它。例如,我刚遇到这个问题是因为insert-file-literally(并且现在撤消或删除/重新插入文件为时已晚)。
T. Verron 2014年

@Stefan在Emacs之外可能存在太多错误配置,可能导​​致这种情况,仅举几例:某人将BOM表保存到最初以cp-12XX单字节编码的文件中,这混淆了复制文本的源代码编辑器,源代码编辑器错误地报告了剪贴板中内容的类型等。在编辑一些最初被错误编码的古老的ASP源代码时,我经常看到这一点。
wvxvw 2014年

Answers:


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

来自https://launchpad.net/sx-emacs-werkstatt的 misc-utils.el

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.