【问题标题】:How to cleanly regain the right coding system如何干净利落地重新获得正确的编码系统
【发布时间】:2019-03-21 21:48:24
【问题描述】:

有没有办法在未知编码和已知编码之间进行更好的转换?目前,许多有效字符被错误地显示为不可编码。

这是我遇到的问题:

我打开一个 Latin-1 文本文件,令我惊讶的是,编码系统指示符不再是 1 而是 = 表示无转换。所有非 ASCII 字符都显示为转义符。 所以我尝试在编码系统指示器上通过 m3 设置编码系统,告诉我想再次使用 Latin-1。

现在,所有恰好是有效 Latin-1 代码的非 ascii 字符都被列为无法编码(这实际上是不正确的)。这很令人困惑。

最后,我通过在文件的某处发现一个零字节解决了这个问题。

复制:

  1. 打开一个包含非 ascii 字符的有效 Latin-1 文件,并注意 1: 作为编码系统指示符。

  2. 在其中某处添加 C-@(零)。一开始可能更多

  3. 保存文件并终止缓冲区。

  4. 现在重新打开该文件,注意=: 是编码系统指示符

  5. 现在切换到 Latin-1 并查看缓冲区 *Warning* 向您显示系统认为不可转换的有效代码列表,但不是真正的罪魁祸首,因为该列表以 ... 结尾

我希望只显示零字符。

(在 Emacs 25 和 24 中同样发生)

【问题讨论】:

    标签: emacs iso-8859-1


    【解决方案1】:

    no-conversion 实际上意味着缓冲区保存的是底层原始字节,而不是预期的字符。当您将编码系统更改为 latin-1 时,您并没有更改缓冲区的内容,您只是告诉 Emacs 您打算使用 latin-1 将缓冲区保存到文件中。所以它抱怨所有非 ASCII 字节,因为 latin-1 不知道如何编码这些 bytes (它只编码它们应该表示的字符,即它将它们编码为那些字节) .

    您想要重新加载您的文件使用latin-1(而不是no-conversion)编码系统,您可以使用C-x RET r latin-1 RET

    也许 Emacs 应该让用户在缓冲区未修改并且您从 no-conversion 更改为其他内容时恢复缓冲区!我建议你 M-x report-emacs-bug 解释一下你是如何发现界面令人困惑的。

    【讨论】:

      猜你喜欢
      • 2012-11-28
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 2011-11-28
      • 2016-09-09
      • 2016-03-27
      • 1970-01-01
      相关资源
      最近更新 更多