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


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

如果它是纯文本文件,则它不存储有关编码的任何内容。我不能说富文本。
Wuffers 2011年

是的,我说的是纯文本。
蒂姆(Tim)

Answers:


19

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

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

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

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

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

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

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


那么,file -bi如果不使用BOM,该如何工作?
老盖泽2014年

@OldGeezer:file具有各种确定文件类型和编码的试探法。通常,它在文件中查找某些字符串或字节序列。如果您需要更多具体信息,则可能必须阅读源。或者只是问一个单独的问题:-)。
sleske 2014年

@OldGeezer:而且,顺便说一句,file不能可靠地检测大多数文本编码(因为这很困难)。手册页上有一些有关字符集检测的信息- file大多数仅识别ASCII,UTF-8 / 16,EBCDIC和ISO-8859-x。例如,以KOI8-R编码的文件被报告为“ ISO-8859-1”。
sleske 2014年

4

纯文本文件不存储有关其编码的任何信息。查看器根据您为其设置的字符编码来确定它。它无法自行确定,因为它与计算机完全相同。


因此,文本查看器无法区分文本文件的编码方法。如果为文本查看器提供了一个对象/可执行文件,它能否分辨出它不是文本文件?
蒂姆(Tim)

不,不能。它将尝试像打开文本文件一样打开它。当然还会显示一堆乱码。唯一可以区分编码的方法是手动更改编码。
Wuffers 2011年

@Tim:大多数文本查看器使用启发式检查来检查某些内容是否是文本文件。如果文件中包含许多不可打印的字符,则许多查看器和编辑器都会发出警告(例如lessgrep在Unix / Linux上)。
sleske
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.