当前位置: 首页 > news >正文

平顶山市网站建设_网站建设公司_Logo设计_seo优化

.net做网站的优缺点,做金融的网站,泰安房产网官网,wordpress获取媒体库阅读目录 一 了解字符编码的知识储备二 字符编码介绍三 字符编码应用之文件编辑器3.1 文本编辑器之nodpad3.2 文本编辑器之pycharm3.3 文本编辑器之python解释器3.4 总结四 字符编码应用之python4.1 执行python程序的三个阶段4.2 python2与python3字符串类型的区别一 了解字符编…阅读目录 一 了解字符编码的知识储备二 字符编码介绍三 字符编码应用之文件编辑器3.1 文本编辑器之nodpad3.2 文本编辑器之pycharm3.3 文本编辑器之python解释器3.4 总结四 字符编码应用之python4.1 执行python程序的三个阶段4.2 python2与python3字符串类型的区别 一 了解字符编码的知识储备 一 计算机基础知识   二 文本编辑器存取文件的原理nodepadpycharmword #1、打开编辑器就打开了启动了一个进程是在内存中的所以用编辑器编写的内容也都是存放与内存中的断电后数据丢失#2、要想永久保存需要点击保存按钮编辑器把内存的数据刷到了硬盘上。#3、在我们编写一个py文件没有执行跟编写其他文件没有任何区别都只是在编写一堆字符而已。 三 python解释器执行py文件的原理 例如python test.py #第一阶段python解释器启动此时就相当于启动了一个文本编辑器#第二阶段python解释器相当于文本编辑器去打开test.py文件从硬盘上将test.py的文件内容读入到内存中(小复习pyhon的解释性决定了解释器只关心文件内容不关心文件后缀名)#第三阶段python解释器解释执行刚刚加载到内存中test.py的代码( ps在该阶段即真正执行代码时才会识别python的语法执行文件内代码当执行到nameegon时,会开辟内存空间存放字符串egon) 四 总结python解释器与文件本编辑的异同 #1、相同点python解释器是解释执行文件内容的因而python解释器具备读py文件的功能这一点与文本编辑器一样#2、不同点文本编辑器将文件内容读入内存后是为了显示或者编辑根本不去理会python的语法而python解释器将文件内容读入内存后可不是为了给你瞅一眼python代码写的啥而是为了执行python代码、会识别python语法。 二 字符编码介绍 一 什么是字符编码   计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平)关于磁盘的磁特性也是同样的道理。结论计算机只认识数字很明显我们平时在使用计算机时用的都是人类能读懂的字符用高级语言编程的结果也无非是在文件内写了一堆字符如何能让计算机读懂人类的字符必须经过一个过程#字符--------翻译过程-------数字 #这个过程实际就是一个字符如何对应一个特定数字的标准这个标准称之为字符编码 二 以下两个场景下涉及到字符编码的问题 #1、一个python文件中的内容是由一堆字符组成的存取均涉及到字符编码问题python文件并未执行前两个阶段均属于该范畴#2、python中的数据类型字符串是由一串字符组成的python文件执行时即第三个阶段 三 字符编码的发展史与分类(了解) 计算机由美国人发明最早的字符编码为ASCII只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用 8 位来表示一个字节即2**8 256所以ASCII码最多只能表示 256 个符号 当然我们编程语言都用英文没问题ASCII够用但是在处理数据时不同的国家有不同的语言日本人会在自己的程序中加入日文中国人会加入中文。 而要表示中文单拿一个字节表表示一个汉子是不可能表达完的(连小学生都认识两千多个汉字)解决方法只有一个就是一个字节用8位2进制代表位数越多代表的变化就多这样就可以尽可能多的表达出不通的汉字 所以中国人规定了自己的标准gb2312编码规定了包含中文在内的字符数字的对应关系。 日本人规定了自己的Shift_JIS编码 韩国人规定了自己的Euc-kr编码另外韩国人说计算机是他们发明的要求世界统一用韩国编码但世界人民没有搭理他们   这时候问题出现了精通18国语言的小周同学谦虚的用8国语言写了一篇文档那么这篇文档按照哪国的标准都会出现乱码因为此刻的各种标准都只是规定了自己国家的文字在内的字符跟数字的对应关系如果单纯采用一种国家的编码格式那么其余国家语言的文字在解析时就会出现乱码 所以迫切需要一个世界的标准能包含全世界的语言于是unicode应运而生韩国人表示不服然后没有什么卵用 ascii用1个字节8位二进制代表一个字符 unicode常用2个字节16位二进制代表一个字符生僻字需要用4个字节 例 字母x用ascii表示是十进制的120二进制0111 1000 汉字中已经超出了ASCII编码的范围用Unicode编码是十进制的20013二进制的01001110 00101101。 字母x用unicode表示二进制0000 0000 0111 1000所以unicode兼容ascii也兼容万国是世界的标准   这时候乱码问题消失了所有的文档我们都使用但是新问题出现了如果我们的文档通篇都是英文你用unicode会比ascii耗费多一倍的空间在存储和传输上十分的低效 本着节约的精神又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节常用的英文字母被编码成1个字节汉字通常是3个字节只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符用UTF-8编码就能节省空间 字符ASCIIUnicodeUTF-8A0100000100000000 0100000101000001中x01001110 0010110111100100 10111000 10101101从上面的表格还可以发现UTF-8编码有一个额外的好处就是ASCII编码实际上可以被看成是UTF-8编码的一部分所以大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。 四 总结字符编码的发展可分为三个阶段(重要)  重点 三 字符编码应用之文件编辑器 3.1 文本编辑器之nodpad    乱码分析  3.2 文本编辑器之pycharm 以utf-8格式打开选择reload  pycharm中reload与convert的区别 3.3 文本编辑器之python解释器 文件test.py以gbk格式保存内容为x林无论是python2 test.py还是python3 test.py都会报错因为python2默认asciipython3默认utf-8除非在文件开头指定#coding:gbk 3.4 总结 总结非常重要的两点 #1、保证不乱吗的核心法则就是字符按照什么标准而编码的就要按照什么标准解码此处的标准指的就是字符编码#2、在内存中写的所有字符一视同仁都是unicode编码比如我们打开编辑器输入一个“你”我们并不能说“你”就是一个汉字此时它仅仅只是一个符号该符号可能很多国家都在使用根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时才能确定”你“到底是一个汉字还是一个日本字这就是unicode转换成其他编码格式的过程了                   unicode-----encode--------utf-8                   utf-8--------decode----------unicode #补充浏览网页的时候服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器如果服务端encode的编码格式是utf-8 客户端内存中收到的也是utf-8编码的结果。   四 字符编码应用之python 4.1 执行python程序的三个阶段 python test.py   我再强调一遍执行test.py的第一步一定是先将文件内容读入到内存中 test.py文件内容以gbk格式保存的内容为 阶段一启动python解释器 阶段二python解释器此时就是一个文本编辑器负责打开文件test.py,即从硬盘中读取test.py的内容到内存中 此时python解释器会读取test.py的第一行内容#coding:utf-8来决定以什么编码格式来读入内存这一行就是来设定python解释器这个软件的编码使用的编码格式这个编码可以用sys.getdefaultencoding()查看如果不在python文件指定头信息-*-coding:utf-8-*-,那就使用默认的python2中默认使用asciipython3中默认使用utf-8    改正在test.py指定文件头字符编码一定要为gbk #coding:gbk 你好啊 阶段三读取已经加载到内存的代码unicode编码格式然后执行执行过程中可能会开辟新的内存空间比如xegon 内存的编码使用unicode不代表内存中全都是unicode在程序执行之前内存中确实都是unicode,比如从文件中读取了一行xegon,其中的x等号引号地位都一样都是普通字符而已都是以unicode的格式存放于内存中的但是程序在执行过程中会申请内存与程序代码所存在的内存是俩个空间用来存放python的数据类型的值而python的字符串类型又涉及到了字符的概念比如xegon,会被python解释器识别为字符串会申请内存空间来存放字符串类型的值至于该字符串类型的值被识别成何种编码存放这就与python解释器的有关了而python2与python3的字符串类型又有所不同。 4.2 python2与python3字符串类型的区别 一 在python2中有两种字符串类型str和unicode str类型 当python解释器执行到产生字符串的代码时例如x上会申请新的内存地址然后将上编码成文件开头指定的编码格式 要想看x在内存中的真实格式可以将其放入列表中再打印而不要直接打印因为直接print()会自动转换编码这一点我们稍后再说。 #coding:gbk x上 y下 print([x,y]) #[\xc9\xcf, \xcf\xc2] #\x代表16进制此处是c9cf总共4位16进制数一个16进制四4个比特位4个16进制数则是16个比特位即2个Bytes这就证明了按照gbk编码中文用2Bytes print(type(x),type(y)) #(type str, type str) 理解字符编码的关键 内存中的数据通常用16进制表示2位16进制数据代表一个字节如\xc9代表两位16进制一个字节 gbk存中文需要2个bytes而存英文则需要1个bytes它是如何做到的 gbk会在每个bytes即8位bit的第一个位作为标志位标志位为1则表示是中文字符如果标志位为0则表示为英文字符 x‘你a好’ 转成gbk格式二进制位 8bit8bit8bit8bit8bit(17bit)(17bit)(07bit)(17bit)(17bit) 这样计算机按照从左往右的顺序读 #连续读到前两个括号内的首位标志位均为1则构成一个中午字符你#读到第三个括号的首位标志为0则该8bit代表一个英文字符a#连续读到后两个括号内的首位标志位均为1则构成一个中午字符好 也就是说每个Bytes留给我们用来存真正值的有效位数只有7位而在unicode表中存放的只是这有效的7位至于首位的标志位与具体的编码有关即在unicode中表示gbk的方式为 (7bit)(7bit)(7bit)(7bit)(7bit)   按照上图翻译的结果我们可以去unicode关于汉字的对应关系中去查链接https://pan.baidu.com/s/1dEV3RYp   可以看到“”上“”对应的gbkG0代表的是gbk编码就为494F即我们得出的结果而上对应的unicode编码为4E0A我们可以将gbk--decode--unicode #coding:gbk x上.decode(gbk) y下.decode(gbk) print([x,y]) #[u\u4e0a, u\u4e0b] unicode类型 当python解释器执行到产生字符串的代码时例如su林会申请新的内存地址然后将林以unicode的格式存放到新的内存空间中所以s只能encode不能decode #coding:gbk xu上 #等同于 x上.decode(gbk) yu下 #等同于 y下.decode(gbk) print([x,y]) #[u\u4e0a, u\u4e0b] print(type(x),type(y)) #(type unicode, type unicode) 打印到终端 对于print需要特别说明的是 当程序执行时比如 x上 #gbk下字符串存放为\xc9\xcf print(x) #这一步是将x指向的那块新的内存空间非代码所在的内存空间中的内存打印到终端按理说应该是存的什么就打印什么,但打印\xc9\xcf对一些不熟知python编码的程序员立马就懵逼了所以龟叔自作主张在print(x)时使用终端的编码格式将内存中的\xc9\xcf转成字符显示此时就需要终端编码必须为gbk否则无法正常显示原内容上 对于unicode格式的数据来说无论怎么打印都不会乱码 unicode这么好不会乱码那python2为何还那么别扭搞一个str出来呢python诞生之时unicode并未像今天这样普及很明显好的东西你能看得见龟叔早就看见了龟叔在python3中将str直接存成unicode我们定义一个str无需加u前缀就是一个unicode屌不屌   二 在python3 中也有两种字符串类型str和bytes str是unicode #coding:gbk x上 #当程序执行时无需加u上也会被以unicode形式保存新的内存空间中,print(type(x)) #class str#x可以直接encode成任意编码格式 print(x.encode(gbk)) #b\xc9\xcf print(type(x.encode(gbk))) #class bytes 很重要的一点是看到python3中x.encode(gbk) 的结果\xc9\xcf正是python2中的str类型的值,而在python3是bytes类型在python2中则是str类型 于是我有一个大胆的推测python2中的str类型就是python3的bytes类型于是我查看python2的str()源码发现 转载于:https://www.cnblogs.com/iamjianghao/p/8028890.html
http://www.ihoyoo.com/news/10810.html

相关文章:

  • 网络教育网站如何做营销推广中国室内设计联盟网
  • 如何在百度上做自己的网站杭州做网站公司哪家好
  • 珠海市网站建设制作设计平台运城seo
  • 济南做网站要多少钱Wordpress重复导入
  • 教育网站制作下载国家建设协会工程质量分会网站
  • 张家港企业网站制作北京网站排名推广
  • 如何在行业门户网站上做推广路由器安装wordpress
  • 湖南响应式网站建设推荐wordpress 搭建知识库
  • 浙江建设银行官网站纪念币彩票网站上的走势图是怎么做的
  • 短期网站建设培训班网站建设和媒体渠道
  • 菜鸟移动端网站开发海口手机网站建设
  • 网站重新备案 需要关闭网站么电子商务网站建设感想
  • dw如何建设网站网站建设的质量区别
  • 合肥有哪些做网站的山东省建设教育信息网站首页
  • 哈尔滨网页设计模板网站市场营销策划公司
  • 专业的企业网站建设公司广州市城乡建设局
  • 建设网站需要注册证书吗百度竞价排名背后的伦理问题
  • 正规免费发布信息网站wordpress插件重写
  • 专做洗衣柜的网站建网站 必须学html吗
  • 做网站原价商品打个横线企业网站推广工具
  • 南宁市建设局网站青岐网站建设平台
  • 网站开发网站设计制作咸阳市网站建设公司
  • 做精神科网站丹徒网站建设怎么样
  • 做网站计入什么科目子域名绑定wordpress子目录
  • you物公馆网站建设长春市建设工程信息网站
  • 网站程序方面如何开设一个网站
  • 网站建设桔子科技站长工具seo综合查询adc
  • 南京做企业网站公司哪家好工程设计公司
  • 可以悬赏做任务的叫什么网站张槎网站建设制作
  • 宇舶手表网站加盟类网站怎么做