文章中如果有写错、表述不明、有疑问或者需要扩展的知识,欢迎留言或者私信~
    
   
    1.区别
   
    如果一个文件说是
    
     文本文件
    
    ,使用任何一种
    
     文本编辑器
    
    打开可以展现出
    
     人类可读信息字符
    
    ,因为编码都
    
     符合某种编码方式
    
    ,如ASCII、UTF8、GB2312等等(在文件头可以读出来是什么编码方式,然后文本编辑器再按照规则去读取翻译成对应的字符,展示给我们的就是可读的了)。(关于编码方式不了解可以看
    
     这一篇
    
    )
   
    如果一个文件说是
    
     二进制文件
    
    ,肯定没有编码方式,使用某些
    
     文本编辑器
    
    可以打开,展现出来的就是可能一些
    
     乱码
    
    的字符;也有些可以读取二进制文件的,展示出来就是原始的0101这种二进制了。比如说使用
    
     UtralEdit
    
    可以显示
    
     原始的二进制文件
    
    ,显示的就是
    
     原始16进制
    
    。右侧自动选了
    
     一种编码方式进行翻译成文
    
    本,比如他自动选择的就是GBK,显示出来就是乱码。
   
    下图的例子使用
    
     UtralEdit
    
    打开的一个
    
     png格式
    
    的文件(也就是图片,本质上也是一个二进制文件):
   
     
   
    (疑问:为什么utraledit 选择了
    
     另外一种编码方式的时候
    
    
     左边的二进制的值
    
    也变了??)
   
    有些
    
     二进制文件
    
    使用
    
     通用的规范进行编码,有一定的标准
    
    ,比如常见的图片格式JPEG,PNG,使用
    
     看图软件
    
    就能正常打开
    
     显示出图片的样子
    
    。就是二进制文件需要特殊的软件进行打开才是正确的打开方式。
   
    有些
    
     二进制文件
    
    编码格式是程序自定义规范进行编码,对于这种二进制,只有程序的开发者自己知道该文件所对应的编码规范,进行解码使用。
   
    
     可执行文件
    
    ,也是文件,也是
    
     二进制文件
    
    ,而对这
    
     种文件的解析就需要操作系统的参与了
    
    ,涉及到
    
     可执行文件的装载等,也是有一个的规范的
    
    。可以查看《程序员的自我修养》下的文章
   
    我们说这个文件是二进制文件,这个是文本文件,视角就是从
    
     打开这个文件
    
    的
    
     程序
    
    在对
    
     文件内容
    
    的解释上。
   
    我们使用一般的
    
     文本编辑器
    
    打开
    
     文本文件,
    
    看到的是我们认识的字符。
   
    打开
    
     二进制文件
    
    ,可能根本就打不开。
   
    (而从计
    
     算机本身的存储
    
    的视角来看,文本文件和二进制文件都是文件,都是存储在电脑上的都是0101的二进制。只不过文本文件是把字符用某种方式解码成对应的0101这种,读取时再解码成字符)
   
    2.如何修改二进制文件-Vim
   
使用vim修改:
vim -b 文件名
:%!xxd
——转化成16进制
然后进行修改二进制
:%!xxd -r
——转回去
:wq
    
     在Linux下使用vim配合xxd查看并编辑二进制文件 – killkill – 博客园
    
   
    3.如何把二进制文件转化成其他文本文件,从而搜索ASCII字符
   
    1.先使用
    
     iconv
    
    命令://IGNORE忽略那些翻译不了的
   
iconv -f GB2312 -t UTF-8//IGNORE {} -o $filename.text
    
     Linux命令(35)——iconv命令 – 云+社区 – 腾讯云
    
   
    2.再使用
    
     grep
    
    对 *.text 进行搜索想要查找的ASCII字符
   
 
