文本文件是否存储其编码方法以供以后解码?

Tim*_*Tim 20 character-encoding textfiles

  1. 我想知道某些文本文件是否将其编码方法与文本内容一起存储以供以后解码?
  2. 或者是文本查看器的工作是猜测给定文本文件的编码方法,而猜测可能并不总是正确的?如果是,文本查看器如何猜测?

sle*_*ske 19

我想知道某些文本文件是否将其编码方法与文本内容一起存储以供以后解码?

Mark Szymanski 的回答是正确的——纯文本文件中没有明确的编码信息——这就是“纯文本文件”的定义,“纯文本”是指文件中没有元数据的事实。

但是,某些应用程序会在编码为 UTF-16 或 UTF-32/UCS-4 的文本文件中放置字节顺序标记(BOM)。BOM 并不是真正用来表示编码(它表示字节顺序,顾名思义),但许多应用程序将使用 BOM 的存在来识别 UTF-16/UTF-32,因此它用作编码指示符。

或者是文本查看器的工作是猜测给定文本文件的编码方法,而猜测可能并不总是正确的?如果是,文本查看器如何猜测?

是的,文本查看器只能猜测。它通常使用一些启发式方法:

  • 在某些编码中(特别是在 UTF-8 中)并非所有字节序列都有效。因此,应用程序可以尝试将文件解码为 UTF-8。如果成功,则文件可能是UTF-8;如果它因找到无效的字节序列而失败,则不是。这是 egvim默认的工作方式:它在读取文件时首先尝试使用 UTF-8;如果失败,则回退到 ISO-8859-1。
  • 在大多数较旧的 8 位编码中,任何字节序列都是有效的。在这种情况下,您有时可以通过查看字节直方图(不同字节/字节序列的频率)来猜测编码。Internet Explorer 过去常常这样做以“猜测”页面的编码。然而,这很容易出错,所以很少有程序这样做。

在大多数情况下,必须明确告知程序文本文件的编码是什么,否则将无法正确读取。