如何永久更改文本文件的编码?

我有一堆编码为iso-8859-1-unix的html文件和一些用utf-8-unix编码的文件。我想要的是在utf-8-unix中编码所有这些。 我已经尝试过(我认为它们实际上是相同的命令):

C-x C-m f utf-8-unix
C-x RET f utf-8-unix

模式行从1更改为U,但在关闭文件并重新打开后,模式行再次显示1。无论我尝试什么,我似乎无法永久改变,我不明白为什么。

根据以下建议,我创建了一个包含此内容的新文件


C-h v buffer-file-coding-system returns this:

Its value is utf-8-unix
Local in buffer new.htm; global value is the same.

所以它看起来还不错。我保存,杀死缓冲区,重新打开文件, C-h v buffer-file-coding-system 返回:

Its value is undecided-unix
Local in buffer new.htm; global value is utf-8-unix

我真的很困惑。

编辑:感谢大家帮助明确这一点!

5
您是否在更改编码后保存文件?
额外 作者 Louis Salin,
永久设置编码的标准方法是将其添加为文件局部变量Mx add-file-local-variable RET编码RET utf-8 RET ,保存,您就完成了。但我们应该知道文件的内容,以了解为什么Emacs使用iso-8859-1编码打开它。
额外 作者 Ryan Cox,
C-h v coding RET 您必须在该缓冲区中发出此命令。也许有一个特殊的字符迫使Emacs认为该文件具有特定的编码。或者也许你的init文件中有东西。
额外 作者 Ryan Cox,
对不起,我的错,请参阅 buffer-file-coding-system 变量
额外 作者 Ryan Cox,
您在问题中提供的示例仅包含ASCII字符。因此它的UTF-8编码和Latin-1编码将是相同的。特别是,当您打开文件时,emacs无法区分编码。无论如何,如果HTML文件的 <head> 部分包含 <meta charset ='utf-8'> ,那么html-mode应该使用它来决定编码何时你打开文件。在这种情况下,无需使用文件局部变量。
额外 作者 AttackingHobo,
是的,这就是我所说的。
额外 作者 AttackingHobo,
函数 prefer-coding-system 可能会有所帮助,但这是全局首选项,而不是文件特定的。
额外 作者 user1126070,
@JordonBiondo我是。
额外 作者 Barnabas Nagy,
@giordano如何检查文件局部变量的当前值?文件的内容没什么特别的,只是一些标准的html。
额外 作者 Barnabas Nagy,
@giordano奇怪。如果我执行 Ch v coding 并按RET,我会提示选择完成: coding-category - *coding-system - * 等等。但它看起来并不像只有编码
额外 作者 Barnabas Nagy,
@ HaraldHanche-Olsen我明白了。因此,如果文件只包含ASCII字符,那么如果我将编码设置为latin-1,utf8或保持未定,则没有区别。我放在 meta charset 中的任何内容都将是文件编码?
额外 作者 Barnabas Nagy,