@
ysc3839 > 除了 Windows,一些 Linux 的桌面环境,以及 Android 、macOS 也会通过文件后缀来区分文件类型,不见得所有类 Unix 系统都是通过读取文件内容来区分文件类型的。
这句不对,这些系统并不是根据后缀拓展名来区分文件类型的,而是根据扩展名来决定 [使用什么程序来处理这个文件] ,相当于给文件进行一个不强制的分类而已。比如看到 .aaa 后缀就交给 A 程序处理,看到 .bbb 后缀就交给 B 程序处理。
windows 下也是如此,正如 @
AX5N #17 #18 说的那样,这类知识没人教,所以很多人认为 Windows 下是通过扩展名来识别文件类型的。其实不是,Windows 也仅仅是根据扩展名来决定使用哪个程序来处理这类文件而已。
> 而且读取文件内容来区分文件类型并不是一个很好的设计。
是不是一个好的设计我不知道,但至少现在几乎所有程序都是根据文件内容来区分文件类型的,区分的方法是判断“文件头”,也就是文件开头的几个字节是什么。
而通过文件扩展名来识别文件类型却并不可靠,比如 @
em70 #19 说的早期 PS 如果图片扩展名不对就打不开。并且现在网上有好多的图片文件扩展名也都不对,网络上一般通过 Content-Type 中的 MIME 信息来标识文件的处理方式,比如是图片还是视频,还是要求下载。所以网络上的图片很大一部分都是没有扩展名的,这就导致你右键另存为之后文件没有后缀而打不开。
(当然,这里很多人会不管图片具体是什么格式而直接将扩展名改成 .jpg 或者 .png ,告诉系统这是张图片,用图片查看器打开就行,图片查看器通常不会管你的拓展名是啥,而是根据文件内容的前几个字节来判断文件类型进行解析渲染)