zoukankan      html  css  js  c++  java
  • 编码表理解

    要理解文件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中的英文和数字还是占一个字节,从空间上来说是合理的。

     

  • 相关阅读:
    单表通用excle导入(只要是单表都可以,只需要传文件跟表名及用户id即可)
    单表通用excle导出(只要是单表都可以)
    mysql数据库中的mybatis中xml解决in不起作用的问题
    Mysql获取系统时间,年,月,日
    Linux下MySQL的数据库安装
    MP3音频文件的剪切合并方法
    Oracle client客户端简易安装网上文档一
    excel导出功能
    Oracle数据库的创建表全
    Oracle表字段的增加、删除、修改和重命名
  • 原文地址:https://www.cnblogs.com/tdws/p/4098956.html
Copyright © 2011-2022 走看看