【问题标题】:Emacs ediff, foreign character sets, and text file encodingsEmacs ediff、外来字符集和文本文件编码
【发布时间】:2012-05-08 18:00:51
【问题描述】:

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

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

ediff 能否以某种方式处理包含外来字符的文本文件?

【问题讨论】:

  • 另一个典型例子是使用 UTF-16 的 Windows 注册表编辑器导出。

标签: emacs encoding


【解决方案1】:

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

(setq ediff-diff-options "--text")

编辑:

Ediff 调用外部程序 GNU 实用程序 diff 来计算差异;但是,diff 不理解 unicode,并将 unicode 编码文件视为二进制文件。选项“--text”只是强制它将输入文件视为文本文件。参见 GNU Diffutils 手册:Comparing and Merging Files;特别是1.7 Binary Files and Forcing Text Comparisons

【讨论】:

  • 这么简单?很好,谢谢。但是你愿意详细说明吗?该手册仅提到 '-w' 作为 ediff-diff-options 的可能值。 ediff 在 setq 之前不起作用是怎么回事? setq 如何改变它?
  • 感谢您的解释。它工作正常。我只是想知道发生了什么。
  • 非常感谢,它解决了我的问题,我还发现如果你先运行ediff,该值不会立即生效,对于ediff使用ediff-actual-diff-options,所以我退出emacs并运行再次,没关系。
  • 这不适用于 SLES 15 SP2 的 Emacs 25.3.1:差异缓冲区仍然显示:Binary files ... and ... differ。即使设置ediff-custom-diff-options 也无济于事。
【解决方案2】:

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

【讨论】:

  • 一项新测试现在表明 TextEdit 可以正常打开 utf-8 文件。我最后一次通过编码 utf-16 是罕见的,当文件具有多个字符集时,emacs 和 TextEdit 都能无缝处理。这已经是几年前的事了。 TextEdit 是否同时增加了对 utf-8 的支持?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2014-05-04
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
相关资源
最近更新 更多