正确理解计算机编码

编码是什么?
  
由于计算机只能识别'0101'这样的二进制,所以需要一种机制将人类使用的文字转化为二进制被计算机识别。这个机制就是编码
换句话说,其实我们肉眼看到的文字从来就没有真正存在过,都是一堆一堆的编码存在的。包括存在在硬盘上的代码也是一堆0101的编码


内存与硬盘的编码有什么不同?

  内存中统一采用unicode,因为unicode是全语言码,通过牺牲空间为代价来换取可以转换成任意编码(不乱码),
  硬盘采用各种编码,一般为utf-8和gbk,不用Unicode那是因为使用Unicode表示英文时过于浪费空间。
注意:软件代码是存放于硬盘的,而运行软件是要将软件加载到内存的。由硬盘编码转换为Unicode
还有:虽说现在正常的电脑内存都是unicode编码,但是还是存在很多地方或系统、应用软件仍然会采用各种各样的编码,这是历史遗留问题。


GBK编码是如何做到存储中英文的?
  gbk存英文1个byte,存中文2个byte
gbk会在每个bytes,即8位bit的第一个位作为标志位,标志位为1则表示是中文字符,如果标志位为0则表示为英文字符


python的默认编码是什么?
  #coding:utf-8,来决定以什么编码格式来读入内存。换句话说,也决定了以什么编码格式存入硬盘
  python2中默认使用ascii,python3中默认使用utf-8
额外知识:python的字符串编码为什么经常出问题?
  因为python在代码方面都是英文,所以不管是ascii编码还是utf8都可以处理,不需要考虑。
  但唯有字符串可能出现中文,总所周知ASCII是不能处理中文的


python执行时是如何处理字符串的?
  
python中有两类字符串,unicode和str
但是python3中将str直接存成unicode,我们定义一个str,无需加u前缀,就是一个unicode
注意:Unicode类型只能encode,不能decode 
在python2中的执行流程
当python解释器执行到产生字符串的代码时(例如x='上'),会申请新的内存地址,然后将'上'编码成文件开头指定的编码格式存放到该内存空间中。
当python解释器执行到产生字符串的代码时(例如s=u'林'),会申请新的内存地址,然后将'林'以unicode的格式存放到新的内存空间中,



posted @ 2018-05-27 12:00  新卡辣辣  阅读(478)  评论(0编辑  收藏  举报
带我上天