Answers:
我想知道某些文本文件是否将其编码方法与文本内容一起存储以供以后解码?
Mark Szymanski的答案是正确的-纯文本文件中没有明确的编码信息-这是“纯文本文件”的定义,“纯文本”是指文件中没有元数据的事实。
但是,某些应用程序会在编码为UTF-16或UTF-32 / UCS-4的文本文件中放置字节顺序标记(BOM)。BOM并不是真正用来表示编码(顾名思义,它表示字节顺序),但是许多应用程序将使用BOM来识别UTF-16 / UTF-32,因此它用作编码指示符。
还是文本查看器的工作是猜测给定文本文件的编码方法,而这种猜测可能并不总是正确的?如果是,文本查看器如何猜测呢?
是的,文本查看器只能猜测。它通常使用一些启发式方法:
vim
默认情况下的工作方式:读取文件时,它将首先尝试使用UTF-8。如果失败,它会退回到ISO-8859-1。在大多数情况下,必须明确告知程序文本文件的编码是什么,否则它将无法正确读取。
file -bi
如果不使用BOM,该如何工作?
file
具有各种确定文件类型和编码的试探法。通常,它在文件中查找某些字符串或字节序列。如果您需要更多具体信息,则可能必须阅读源。或者只是问一个单独的问题:-)。
file
不能可靠地检测大多数文本编码(因为这很困难)。手册页上有一些有关字符集检测的信息- file
大多数仅识别ASCII,UTF-8 / 16,EBCDIC和ISO-8859-x。例如,以KOI8-R编码的文件被报告为“ ISO-8859-1”。
纯文本文件不存储有关其编码的任何信息。查看器根据您为其设置的字符编码来确定它。它无法自行确定,因为它与计算机完全相同。
less
,grep
在Unix / Linux上)。