关于文件格式和编码方式,乱码产生的原因?

计算机上存储的文件都是0101类型的二进制文件,但是为什么有那么多不同的文件格式呢?比如.txt文件、.html文件、.pdf文件、.exe文件、.mp3文件等等,他们底层都是0101类型的文件,那么计算机是如何还原他们的呢?
容易理解的是,只要还原方式不对!必是乱码!
如何正确还原呢?这里我分两种情况:
1.文本文件乱码
这个是我们平常生活中遇到的乱码最多的例子。其实原因基本就只有一个:采用的字符集不同
放到平常我们的编程中,过程如下:

使用某款开发工具编写源代码,然后生成源代码文件,比如.java文件、.py文件、.php文件、.js文件、.css文件等。这些本质上都是文本文件,说白了都可以用txt文件编辑器打开,而且可能不会乱码!

但我们一般不用txt文件编辑器打开,因为使用专属的编辑器可以让他们显示的更漂亮,比如自动换行、高光、类名或者特定标签都有不同的颜色等等。但是关键在于,使用txt文件编辑器打开他们可能没有乱码,为什么呢?因为采用了相同的字符集!

假设你的源代码文件按照utf-8格式的来存储,在计算机里,原代码就变成了0101的二进制文本,那么编译器就得按照utf-8的格式来还原你的0101源代码文件,最后才能转换为机器码,你在源代码中的string字符串比如”中国“,也按照utf-8的格式来存储,比如为4E2D56FD(这是十六进制的表示,还原成二进制就是内存中保存的形式)。程序运行的时候,读取4E2D56FD这个数据并显示出来,问题是显示的方法也得按照utf-8的编码来显示,否则会出现乱码!

所以要想解决乱码,1是看存储时所采用的字符集和编译器编译时采用的字符集和程序运行的时候所采用的字符集是否是一致的,一般而言,存储时采用的字符集跟编译时采用的字符集是一样的了,主要是运行的时候采用的字符集,不同的系统所支持的可能不一样,比如你在windows上,终端显示默认使用GBK进行编码(注:这里我值的字符集就是编码方式,虽然他们有点不一样)

2.其他的乱码
并非所有的文件都是文本文件,比如pdf文件、mp3文件、word文件等。里边可能包含了视频、音频、图像等内容,虽然最后也是0101类型的二进制文件,字符集只是相对文字来说的,对于这些非文字东西,处理形式的不同就产生了不同的文件格式,比如一段音频,可以用不同的方式把它表示成0101的二进制数据文件,这些不同的表示方式被称为编码方式,这里要跟字符集的编码反思这个概念要区分开。这些不同的表示方式对应了不同的音频文件,比如mp3格式、wma格式等。那么还原时对应的还原方法那肯定也是不一样的。

当然,这些文件里边可能包含文字(不论是英文、中文、韩文等),只要是有文字,就必然要指定字符集。

总结
要打开一份文件,或者说一份数据(底层都是0101,所有东西我们都把它看成数据来看待),首先我们得知道他的文件类型是什么,才能用对应的解析器来解析它,否则你用音乐播放器打开word文件那就是噪音或者甚至没有声音!其次若是其中有文字,我们还得规定字符集,否则文字乱码。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值