计算机上存储的文件都是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. Java 基本数据类型 编码方式(小记1.7)

    两个基本概念:类,对象 三大特征:封装,继承,多态 JDK开发工具包包含:JRE运行工具包+JVM运行虚拟机   JDK=JRE+开发工具集   JRE=JVM+Java SE标准类库 注释 :单行注 ...

  2. 中文件编码方式_一文解开java中字符串编码的小秘密

    简介:在本文中你将了解到Unicode和UTF-8,UTF-16,UTF-32的关系,同时你还会了解变种UTF-8,并且探讨一下UTF-8和变种UTF-8在java中的应用. Unicode的发展史 ...

  3. arcgis中编码方式改变引起的shp文件乱码、字符截断问题处理

    arcgis中编码方式改变引起的shp文件乱码.字符截断问题处理 我们有时候使用ArcGIS读取shp文件的时候,打开属性表后,属性值存在中文乱码的情况,或字段项存在长度缩减的情况,这都是使用不同版本 ...

  4. 关于网页乱码和字符编码方式

    网页出现乱码的原因一般是因为字符的编码方式不同. 字符编码是计算机技术的基础,对于计算机来说,所有的信息都是0或者1的二进制序列,计算机是无法直接识别和存储字符的,所以,字符必须经过编码才能被计算机处 ...

  5. 视频文件格式和视频编码方式的区别

    原文地址:https://wenku.baidu.com/view/b2ebd7e44afe04a1b071deaa.html 目前网上的各种视频格式可以说是泛滥成灾,加上各个PMP(Portable ...

  6. charset编码方式与字符集(为什么会乱码)

    背景 在微信小程序开发时,有时候请求的某些网页会出现乱码(尤其是爬取数据时),当我们在外部查看源码时,我们可以发现网页的编码格式不是utf-8 直接说解决方案 在请求求地址地址时,尝试加上charse ...

  7. Java文件读写操作指定编码方式防乱码

    读文件:BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,Re ...

  8. robotframework中文乱码---robotframework日志输出时出现中文以unicode编码方式

    robotframework日志输出时出现中文以unicode编码方式 解决方法: 1.找到目录:python安装目录下C:\python373\Lib\site-packages\robotide\ ...

  9. linux 保存文件名乱码怎么办,Linux 文件名编码转换 乱码 解决办法

    Linux中操作windows下的文件,可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Linux中如何查看文 ...

最新文章

  1. Python 爬虫实例(4)—— 爬取网易新闻
  2. python判断字母左右两边的大写字母有_python习题,,1.26个字母大小写
  3. C语言遥控器程序,红外遥控
  4. CTF-Python打包成的exe文件Re逆向
  5. 盗版与互联网是一对连体婴,会员制背后才是那把手术刀!
  6. box怎么用 latency_换轴记给铝厂 F96 牛油果,换一套 Box 重力蓝
  7. 如何在项目中加入已存在的文件夹, 注意是文件夹而不是文件
  8. 《从0到1学习Flink》—— Apache Flink 介绍
  9. SAP Spartacus B2B 页面 Disable Confirmation 对话框的显示原理
  10. mysql---CV出现的中英文符号错误
  11. 四川对口高职本科学校计算机,2018四川对口高职本科学校有哪些
  12. 委外订单_ERP软件教程:金蝶ERP的委外加工业务流程(一)
  13. Eigen官网教程(6) Map类
  14. struts2 ModelDriven 和 Preparable 拦截器
  15. Eclipse Tips(1):增强智能感知
  16. 【HAVENT原创】Salesforce 给字段加上链接
  17. 微信小程序免300元认证费的方法,无需续费年检!
  18. 使用Travis CI实现C++ CMake工程多平台编译
  19. c++11并发与多线程
  20. C++语言风格流变史(转)

热门文章

  1. 服务器端PHP多进程编程
  2. 我在定制office 2007时遇到的问题
  3. Docker 之 Dockerfile 的概述与使用
  4. 浅谈SD-WAN未来的发展方向
  5. 项目Alpha冲刺——代码规范、本次冲刺任务与计划
  6. [SDOI2016]生成魔咒
  7. servlet配置web.xml问题
  8. mySQL:两表更新(用一个表更新另一个表)的SQL语句
  9. Golang 之 Base62 编码
  10. git bash退回上一个文件夹