为什么 ASCII 编码文件扩展为 UTF-8 或相反缩减为 ASCII?
user:~$ echo 'A B C | } ~' > ./file
user:~$
user:~$ file --brief --mime ./file
text/plain; charset=us-ascii
user:~$
user:~$
user:~$ echo 'ᴁ ♫ ⼌
答案1
我认为您混淆了“编码”和“字符集”。
在第一种情况下,文件仅包含 US-ASCII 中的字符。这意味着无论您使用什么语言设置来显示文件,该文件看起来都一样。
在第二种情况下,文件现在包含属于 UTF8 字符集的字符,因为这就是您放入其中的内容。
这里没有发生转换;该命令只是告诉您文件的内容是什么。
答案2
该file
命令只是猜测您分析的文件中的内容。它通过从文件头读取一定数量的字节来进行分析,有时是在多个步骤过程中(如果它在开头找到一些清晰的标记)。在非结构化文本文件中,它读取的字符数肯定会多于扩展中的字符数./file
,因此它会分析所有字符。
在第二个示例中,您将一些 utf-8 字符放入文件中,并基于此file
将使用字符集结束该文件utf-8
。例如,如果您有仅包含 ASCII 字符的 900Kb 文件并附加“utf-8”回显行,则file
仍会将其报告为 ascii 编码文件,因为它没有读取到 utf-8 编码字符。
阈值接近 100Kb