Emacs ediff、外来字符集和文本文件编码

Emacs ediff、外来字符集和文本文件编码,emacs,encoding,Emacs,Encoding,每当我在文本文件中使用除拉丁语之外的字符集时(比如混合西里尔语和拉丁语),我通常选择utf-16作为编码。这样,我可以在OSX下用emacs或TextEdit编辑文件 但是emacs中的ediff停止了工作。它只说“这个和那个不同的二进制文件” 是否可以使ediff在包含外来字符的文本文件上工作?自定义变量ediff diff options,并添加选项--text (setq ediff-diff-options "--text") 编辑: Ediff调用一个外部程序,GNU实用程序diff

每当我在文本文件中使用除拉丁语之外的字符集时(比如混合西里尔语和拉丁语),我通常选择utf-16作为编码。这样,我可以在OSX下用emacs或TextEdit编辑文件

但是emacs中的ediff停止了工作。它只说“这个和那个不同的二进制文件”


是否可以使ediff在包含外来字符的文本文件上工作?

自定义变量
ediff diff options
,并添加选项
--text

(setq ediff-diff-options "--text")
编辑:
Ediff调用一个外部程序,GNU实用程序
diff
,以计算差异;但是,
diff
不理解unicode,将unicode编码的文件视为二进制文件。选项“-text”只是强制它将输入文件视为文本文件。有关GNU Diffutils,请参阅手册:;特别是。

我强烈建议您使用utf-8而不是utf-16。utf-8是大多数Unix世界(包括Mac OS X)的标准编码,它不会遇到这些问题。

这么简单?很好,谢谢。但你愿意详细说明一下吗?本手册仅提及“-w”作为ediff diff选项的可能值。ediff在setq之前不工作的原因是什么?setq是如何改变的?谢谢你的解释。它很好用。我只是想知道发生了什么。非常感谢,它解决了我的问题,我还发现如果您先运行ediff,值不会立即生效,因为ediff使用ediff实际的diff选项,所以我退出emacs并再次运行,没问题。SLES 15 SP2的emacs 25.3.1不起作用:diff缓冲区仍然说:
二进制文件。。。而且。。。不同
。甚至设置
ediff自定义差异选项也没有帮助。现在一项新的测试表明TextEdit可以打开utf-8文件。我最后一次使用utf-16编码是一个罕见的,当一个文件有多个字符集时,emacs和TextEdit可以无缝地处理它。这已经是几年前的事了。TextEdit是否同时增加了对utf-8的支持?另一个典型的例子是Windows注册表编辑器使用utf-16导出。