编码表理解

2018-06-18 03:05:02来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:.NET 开源了,Visual Studio 开始支持 Android 和 iOS 程序编写

下一篇:适配器模式---设计模式(12)