计算机是如何存储与解读各种文件的

本文灵感来自于文本文件和二进制文件的区别?请举例说明 - 机事本的回答

在计算机的世界里,无论是文本、音频、视频、图片,还是压缩文件,一切都是 01,不同的文件类型通过内容前缀标识,而不是通过文件名后缀来标识,后缀只是为了让人类读懂这个文件应该用什么程序来正确的解码。如果用记事本打开一个照片,就会得到乱码,如果记事本的编码设置与文件不同,同样会得到乱码,如同鸡同鸭讲。文本编码可以理解为是不同的字典,我们通过不同的字典来编/解码人类语言与计算机语言。我们应该怎么查看计算机内部的存储内容呢?在 VS Code 安装hexdump就可以查看各种文件类型的二进制内容了。

文本文件

我们通过ASCII对照表可以发现,UTF8 下的中文,每个汉字占用了 3 个字节:

每个 UTF8 下的 emoji 字符占用了 4 个字节

CSS文件

GIF文件

JPG文件

PS 处理过的 JPG 文件

PNG 文件

MP3 文件

普通的 mp3 太大了,就拿李荣浩的《贝贝》做分析了

关于 MP3 的文件结构可以查看这篇文章 MP3 文件结构解析 (超详细)

MP4 文件

关于 MP4 的文件接口可以查看MP4 Signature Format: Documentation & Recovery Example

PDF文件

ZIP文件

通过验证可知,文件类型是在文件开头字符中标明的(Linux 中的file命令即为此方式判断),因此,在开发过程中,我们不能仅以后缀来判断文件的类型,这会存在很大的安全隐患。

意外发现


原贴地址:https://www.v2ex.com/t/388152

经过验证,果然是这样的,大家不用扒我的博客图片了,这是图床开发者自己的一个公共账号,也是符合上述规则的,最终会指向一个僵尸账号,分析关注与被关注以及位置信息,再与开发者的部分信息进行印证,可以得到很大概率该账号由图床开发者所有。

写到这里,突然发现以后可以写个 Python 脚本,抓取 V2EX,知乎,贴吧等平台高点击率的帖子,通常这样的帖子会有很大的价值,节省自己的阅读时间。

因为热爱,所以执着。