• 编码表理解


    要理解文件IO操作,我认为要先从编码来理解。计算机中所有文件都是以二进制形式存储的,计算机底层只认识高低电位1和0。 8位(bit)为1字节(byte),1024字节为1kb。反正以前学电路数电模电,都是0101,大概都是一个意思吧。

    曾见过一些错误的说法表示,将文件转换为二进制存储以达到节约空间的目的,至今也不能理解这句话的依据何在,文件本身就是二进制还转什么二进制,即使根据编码表,将文本转换成可见的二进制数字再进行存储,那也是大大增加了存储中间,比如将1 按照ASCII编码成二进制,那也是00000001,把它以ASCII编码方式存入文本中也是增加了8倍空间。

    也见过有人问汉字占几个字符,占几个字符是由如何编码决定的。如果我定义一个编码表,并且读取和存储文档都按照我的编码表实现,我可以把00000001定义为博,00000002定义为客。那这两个汉字就占一个字节嘛。按照人家unicode规范就是占2个字节,utf-8就是占3字节。

    纯英文,英文符号以及数字等使用128个码就足矣了,使用7位可以表示0-127, 为了凑足8位,所以在首部补0,这就是ASCII码。所以我们看到:

    a字母  二进制0110 0001  十进制97

    A字母  二进制0100 0001  十进制65

    因为ASCII不足以表示我们这么多汉字字符和其他国家的字符。所以需要更加健全的字符集。  对我们平时比较重要的应当属于GBK编码,Unicode字符集和utf-8编码规则。

    unicode和utf-8的关系 实际上就是 当前准备好了一个unicode字符集,而utf-8是该集合字符的一种编码规则/实现方式,给每一个字符都规定好唯一编号。

    我们在C#或者Java写字符串的时候,需要先转换String的bytes[]   曾经很不理解 字节数组是啥?里面的数字代表什么? 其实里面的数字就是给我们展现 底层所存储的二进制值转换为10进制的数字而已。

    相对于unicode,utf-8的优点在于其汉字一般在3个字节,而ASCII中的英文和数字还是占一个字节,从空间上来说是合理的。

     

  • 相关阅读:
    android学习笔记----启动模式与任务栈(Task)
    二叉搜索树转化成双向链表
    复杂链表的复制
    判断是否为二叉搜索树的后序遍历序列
    树的子结构
    调整数组顺序使奇数位于偶数前面,且奇数之间、偶数之间的相对位置不变
    android学习笔记----HandlerThread学习
    android学习笔记----Handler的使用、内存泄漏、源码分析等一系列问题
    原因分析——cin,coutTLE,scanf,printf就AC
    洛谷P1618_三连击(升级版)
  • 原文地址:https://www.cnblogs.com/tdws/p/4098956.html
Copyright © 2020-2023  润新知