我使用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字符被成对存储。所以看起来这是一种模糊的情况(在文本文件中存储unicode),但它看起来像linqPad和visual studio“做的很明显。”
我想使用emacs,因为它是我唯一能够回流注释行序列的程序(//后面的行,用Alt-Q回流它们),我想在评论中使用希腊字符因为我是描述一个数学程序。
我会感激你的建议和答案。
更新:在其他问题中的一些建议说要尝试M-x describe-char,也绑定到C-x =;这两个都给了我与上面相同的失败信息,所以他们走在正确的轨道上,而不是答案。
答案 0 :(得分:1)
我刚注意到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之外的任何文件,如果你能帮助的话。
答案 1 :(得分:0)
当我升级了所有软件包(包括Emacs)而没有意识到我在升级过程中仍然打开Emacs会话时,这曾经发生在我身上。下次我要求它保存一些Unicode时,它尝试加载8859-7并失败了,因为升级版本中的路径不同。重新启动Emacs之后,我不得不重做编辑。