字符编码之编码格式

写作目的

        我曾经在校期间不管是学习编程涉及到字符串或者读写文件操作还是进行另保存文本文件时,时常会碰到对字符或者字符串进行处理的问题。我当时是知其然而不知所以然,所以在进行编程作业的过程中,往往花费较多精力去解决关于字符编码的问题(比如乱码),这为后来工作当中带来了极大的不便。最终楼主决定花点时间专门研究一下字符编码的问题,以免将来再次遇到这种情况时会稀里糊涂而浪费时间。

     因此,写此文主要目的是梳理以前学到的东西,并且总结关键的知识点,再进一步对此加深理解。同时分享出来,也希望能够帮助诸位小伙伴。--开始写于2019.1月

本文概述

        原本打算鼓励自己多阅读一些相关文献,就觉得已经足够了。然而,事实并非如此,这并不是说他人写得不够好,而是因为楼主从大量的文章中获取到的内容比较零散,再加上一些文章叙述的文字过多并且过于详细但又不够全面,又缺少借助演示图来理解。其实最主要的原因是没有整体性的知识点架构,这很容易扰乱楼主的思路,这显然不是一种好的学习方式。因此写本文之前,楼主在大佬们文章的基础上,同时参考了一些相关的书籍,去除了一些不必要的编码发展历史以及不必要过早解释的东西(实践性很强且没有一定开发经验是很难理解的知识),以楼主的理解抓取主要的知识点整理出来,为避免出现学习之后又忘记的尴尬局面。

        本文会从其发展的阶段来讲解各种常见的编码格式。如果本文尚未涉及到其他编码格式,请另行研究。

正文

二进制文件和文本文件

          在讲编码之前,我们首先得要弄懂二进制文件和文本文件的区别。我们时常编译一个程序会生成一个二进制映射文件,比如后缀名为.bin或者把项目生成DLL文件包含了.lib.dll,此类文件一般是打不开的,如果用记事本打开,其内容就是一堆乱码,除非试图使用特定的工具,打开之后就是一大堆2进制或16进制的数据,这类文件就叫做二进制文件。而文本文件就是我们时常用到的以ASCII码形式或者其他编码格式来存储数据并可以运用软件打开查看内容的文件,比如txt文件,或者我正在写这篇文章用的doc文件。

  存储的数据类型:二进制文件存储数据类型为图形文件(下面讲到的BMP格式文件就是图形文件)以及其他非字符型数据等(二进制映射文件)

 1.二进制文件是变长编码,也可以看成是值编码,它完全可以由编辑者指定的位数来确定一个实型数或者其他信息。(其他信息有用的信息用指定的二进制数据表示,如BMP文件里面的某些二进制数指定的是BMP头文件,又有一些二进制数指定的是头文件长度)

2. 而文本文件是定长编码,即固定位数为一个字符的编码,下文会详细讲到这些。文本文件是根据指定的编码格式转换为二进制数据存储在磁盘上,读取时,根据原来指定的编码格式转换为相应的字符显示出来。这就说明了我们另保存记事本时为何有编码的选项,就是这种原因。

         假如二进制文件的内容里面如果有数字10,二进制数表示10,可能只占用2位数(当然可由编辑者灵活指定位数),那么其存储到磁盘里就是10,直接读取出来的可能还是10。然而由于二进制文件的数据位数完全是由于编辑者决定的,数字10存储的样子又不一定就是数字10.

         假如以ASCII码形式文本文件的内容如果有数字10,则二进制数需要对照ASCII码表来转换成00110001 00110000(数字1十进制为49,数字0十进制为48),各自占用8位,共16位数,那么其存储到磁盘里的是00110001 00110000,读取出来是还要把00110001 00110000根据编码格式转回为12. 文本文件是按照编码规范进行存储的,而二进制文件就是由编辑者决定的(比如说编译器作为编辑者,决定哪些数字符号用哪些二进制数据表示以及多少个字节).

 二进制文件的优点:

1.由于不用转换格式而存取速度快。

二进制文件是无格式存储起来的,意思是不同于文本文件必要使用编码格式。文本文件需要转换过程,从磁盘读取数据时,先把二进制数据根据编码格式转换为指定的字符。写字符存到磁盘时,先把字符根据编码格式转换为指定的二进制数据。

2.不用按照编码格式指定一个字符占用的字节而占用内存的空间小。

3.存储数据灵活。

缺点:

但是由于其存储的灵活度比文本文件高,所以增加了译码的难度。

什么叫编码?

        在计算机里,所有数据进行存储和运算时都要使用二进制数来表示的。而当我们进行软件开发涉及字符处理或者文本编辑时,往往需要使用哪种数据对应指定的哪些二进制数字来表示的,例如字符"A"ASCII码指定用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值