计算机世界中的编码问题

来源:互联网 发布:淘宝页头 编辑:程序博客网 时间:2024/06/07 08:00

      我们知道,计算机的世界是二进制的世界,无论是在硬盘中还是在内存中,都是01的组合,我们作为人要想更好的与计算机进行交互,一个很重要的问题就是信息的展示,如果是数字,还好理解,仅仅需要把二进制的01转换成十进制就行了,但是我们这个世界信息的显示除了数字还有更重要的一部分就是字符或者说是文字,这些字符或者文字与二进制01之间的转换就是我们所说的编码问题。

      编码就相当于是大家约定的一种规则,简单点说就是计算机世界中的法律各个都要遵守,有了这样的规则,交互才会更加方便。

      计算机是美国人发明的,所以最早只需要对127个字母数字符号进行编码,然后就可以表示所有的英文单词数字以及一些符号了,这个编码表被称为ASCII编码,一个字节就搞定了,比如大写字母A的编码是65,小写字母z的编码是122

      等中国人开始玩计算机了,不能显示中文当然很不爽,所以我们搞了个GB2312,它用至少两个字节来表示中文汉字。

      全世界那么多的语言文字,比如韩语、日语、拉丁语等等,要想都可以表示出来,那就得搞个更加通用的编码规则,Unicode应运而生了,现代操作系统和大多数编程语言都直接支持Unicode

      由于Unicode编码方式可以解决统一显示问题,但是你想想本来一个自己就可以表示的字符a现在得弄好几个字节,这当中显然存在大量的浪费,宏观上看就是浪费我们的磁盘空间,很不爽,出于节约用水的原则,又出来了UTF-8编码方式,它是一种可变长的编码方式,常用的英文字母还是一个字节搞定,只有生僻的文字才会用很长的编码。所以说ASCIIUnicodeUTF-8的出现就是一种不断进化不断环保的体现。

      下边讲解一下计算机中编码的常见工作方式。

      在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。这是常见的情况,很多编辑器可以选择转换为其他格式进行保存。

      用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:


      浏览网页的时候,服务器一般情况下会是先读取静态的UTF-8网页到内存中成为Unicode编码,然后将动态修改后的Unicode内容转换为UTF-8传输到浏览器:


另外注意:C、C++、Python2内部字符串都是使用当前系统默认编码,而 Python3、Java内部字符串用Unicode保存 


参考:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819196283586a37629844456ca7e5a7faa9b94ee8000


0 0
原创粉丝点击