- 我想知道某些文本文件是否将其编码方法与文本内容一起存储以供以后解码?
- 或者文本查看器的工作是猜测给定文本文件的编码方法,而猜测可能并不总是正确的?如果是,文本查看器如何猜测呢?
答案1
我想知道某些文本文件是否将其编码方法与文本内容一起存储以供以后解码?
Mark Szymanski 的回答是正确的 - 纯文本文件中没有明确的编码信息 - 这就是“纯文本文件”的定义,“纯”指的是文件中没有元数据。
然而,有些应用程序会放置字节顺序标记(BOM)在以 UTF-16 或 UTF-32/UCS-4 编码的文本文件中。BOM 并非真正用于指示编码(顾名思义,它表示字节顺序),但许多应用程序会使用 BOM 来识别 UTF-16/UTF-32,因此它可用作编码指示符。
或者文本查看器的工作是猜测给定文本文件的编码方法,而猜测可能并不总是正确的?如果是,文本查看器如何猜测呢?
是的,文本查看器只能猜测。它通常使用一些启发式方法:
- 在某些编码(尤其是 UTF-8)中,并非所有字节序列都是有效的。因此,应用程序可以尝试将文件解码为 UTF-8。如果成功,则文件可能是 UTF-8;如果因找到无效字节序列而失败,则不是。
vim
默认情况下,eg 的工作方式如下:它在读取文件时将首先尝试使用 UTF-8;如果失败,则返回 ISO-8859-1。 - 在大多数较旧的 8 位编码中,任何字节序列都是有效的。在这种情况下,您有时可以通过查看字节直方图(不同字节/字节序列的频率)来猜测编码。Internet Explorer 过去常常这样做来“猜测”页面的编码。但是,这很容易出错,因此很少有程序这样做。
大多数情况下,必须明确告诉程序文本文件的编码,否则它将无法正确读取。
答案2
纯文本文件不存储任何有关其编码的信息。查看器根据您为其设置的字符编码来确定它。它无法自行确定它,因为对于计算机来说它们都是一样的。