使用 unicode 保存文件时 Emacs 加载字符集映射失败

问题描述 投票:0回答:3

我使用 gnu emacs 23.3.1 在 Windows 7 64 位上创建了一个普通文本文件。我可以使用其他程序(例如 LinqPad)编辑该文件(该文件恰好是 linqpad 脚本,扩展名 .linq)。一切都很好,直到我在文件中放入一个 Unicode 字符,例如希腊字母 λ (lambda)。我可以在 emacs 中输入该字母并且它显示正确。但是emacs拒绝保存文件,报如下错误

Failure in loading charset map: 8859-7

如果我在 LinqPad 中输入 λ,emacs 会读取并显示它们,但不会保存文件。

我刚刚注意到 Notepad++ 对这个文件还有其他意想不到的行为:它不显示 λ,而是显示成对的奇怪字符,例如 λ。这符合 unicode 字符成对存储的直觉(双关语)。所以看起来这是一种模棱两可的情况(在文本文件中存储 unicode),但它看起来也像 linqPad 和 Visual Studio “做了显而易见的事情。”

我想使用 emacs,因为它是我唯一可以回流注释行序列的程序(// 之后的行,用 Alt-Q 回流它们),并且我想在注释中使用希腊字符,因为我正在描述一个数学程序。

我将不胜感激您的建议和答案。

更新:其他问题中的一些建议说尝试 M-x describe-char,也绑定到 C-x = ;这两个都给了我与上面相同的失败消息,所以它们处于正确的轨道上,只是没有答案。

visual-studio-2010 unicode emacs notepad++ linqpad
3个回答
6
投票

这种情况曾经发生在我身上,当时我升级了所有软件包(包括 Emacs),但没有意识到在升级过程中我仍然打开了一个 Emacs 会话。下次我要求它保存一些 Unicode 时,它尝试加载 8859-7 并失败,因为升级版本中的路径不同。重新启动 Emacs 后我不得不重做编辑。


2
投票

我刚刚注意到 Notepad++ 对这个文件还有其他意想不到的行为:它不显示

λ
,而是显示成对的奇怪字符,例如
λ

λ
是使用 ISO-8859-1 编码或 Windows 代码页 1252(西欧)解释字节序列 0xCE、0xBB 时得到的结果。代码页 1252 可能是您计算机上的默认(“ANSI”)代码页。

0xCE、0xBB 是字符 λ(U+03BB 希腊小写字母 lambda)的

UTF-8
编码。因此,要正确显示它,您需要告诉文本编辑器该文件以 UTF-8 而不是 ANSI 保存。

在 Notepad++ 中,从菜单栏“编码”条目中选择 UTF-8。

在 Emacs 中,

C-x C-m c utf-8-dos
(或
unix
或其他)作为打开或保存文件的前缀。希望通过保存为 UTF-8,您可以避免 ISO 8859-7(希腊语)地图的任何问题;你当然不想用 8859-7 保存任何文件,或者实际上除了 UTF-8 以外的任何文件,如果你能帮忙的话。


0
投票

我刚刚升级了系统,也遇到了这个问题。我的 Emacs 版本从

27.2
更新为
26.1
。我使用的快速修复(又名 kluge)是以 root 身份 cd 到
/usr/share/emacs
并运行:

% ln -s  27.2  26.1

现在我可以完成编辑会话并在重新启动之前保存所有文件。

© www.soinside.com 2019 - 2024. All rights reserved.