编码分类
- 文本类型文件
- ASCII
- 其他类型文件
- Base64
如果用简单直接的方式我们可以把文件分为两类
- 文本类型文件
- 其他类型文件
文本类型文件的编码是逐字符进行的,每个字符的编码在任何语言任何类型计算机上的解释结果都是一样的,文本类型文件是本文分析的重点,后续会针对不同的编码方式进行详细的分析
其他类型的文件,比如png,zip,可执行程序等则需要依赖于特定的环境和对应的应用程序来解析,其编码格式也并不是逐字符进行的,后续我们会找几个文件具体分析一下
文本类型文件
简单来说,文本文件是基于字符编码的文件,每个字符对应一个固定的编码,顺序流式存取,在任何操作系统下的解释和编码结果都是一致的,文本文件除了所包含的字符以外没有任何其他信息。
常用文本编码类型有(点击看码表)
- ASCII
- GB2312
- Unicode
- UTF-8
- UTF-16
ASCII
American Standard Code for Information Interchange,美国信息交换标准代码
ASCII编码方案一共规定了128个字符对应的二进制表示,只占用了一个字节的后面7bit,最高位为0
比如文件里内容为10时的二进制编码
①. 行号
②. 指定编码的二进制数据,一行16字节
③. 指定编码的字符
其他类型文件
把文本文件之外的其他文件归为一类是因为这些文件并不是按字符进行的统一编码,每种类型的文件都有自己特定的编码方式。种类非常多,各有各的不同。此类文件通常习惯把文件最开始的几个字节作为文件类型的标识,比如:
类型 | 文件头 |
JPEG (jpg) | FF D8 FF |
PNG (png) | 89 50 4E 47 |
GIF (gif) | 47 49 46 38 |
PDF(pdf) | 25 50 44 46 2D 31 2E |
AVI (avi) | 41 56 49 20 |
ZIP Archive (zip) | 50 4B 03 04 |
RAR Archive (rar) | 52 61 72 21 |
Base64
讲Base64编码是从二进制到字符的过程,可以把二进制数据编码为可见的字符数据。可以用作HTTP POST和HTTP GET URL中的参数。
- 实现原理
将二进制的8位3字节按6位4字节的方式读取, - 示例
二进制 | 编码方式 | 对应码值 | 对应字符 |
00110001 00110000 00110101 | ASCII编码 | 31 30 35 | 105 |
001100 010011 000000 110101 | Base64编码 | 12 19 0 53 | MTA1 |