Python 字符串编码,Python字符串使用哪种编码格式-

  Python 字符串编码,Python字符串使用哪种编码格式?

  一、字节编码的基础知识

  一、计算机基础知识

  #1我们的程序都运行在特定的操作系统上,比如window、linux、mac等等。

  #2要运行应用程序,操作系统需要发出请求。当我们双击运行时,我们将把应用程序的路径提供给操作系统。

  #3操作系统根据提供的路径从磁盘中寻找这个应用,然后加载到内存中。当它到达内存时,程序代码将进入CPU。

  #4所有的应用都需要向操作系统发起系统调用,然后操作系统执行相关的硬件操作。

  二、计算机访问文件的过程(以巨硬公司的word编辑器为例)

  #Stage1当我们打开word程序时,我们启动了一个word的进程。这时word创建的文档暂时存在内存中,如果不及时保存很容易丢失。

  # stage 2当我们完成文档的内容并单击保存时,word文档的内容将从内存保存到硬盘。

  断电后#Stage3内存中的数据消失,但数据写入硬盘后,即使断电,数据仍在。

  三。Python解释器执行py文件的原理(以hello.py的执行为例)

  # stage1: Python解释器启动,相当于上一步启动word编辑器。

  # stage2: Python解释器相当于一个文本编辑器。当我们要运行hello.py文件时,操作系统会将hello.py文件的内容从硬盘读入内存。

  # stage3: Python解释器解释并执行刚刚加载到内存中的hello.py的代码。

  * *无论是从内存存储到硬盘还是从硬盘加载到内存供CPU运行,硬件层面的010101010101机器码都是互相传递的,硬件层面由操作系统执行* *

  第二,字节编码的引入

  1.什么是字节编码?

  我们都知道计算机是机器,机器之间的交流会使用机器专用语言。交往的方式和人类社会一样,有特定的规则和方式。计算机遵循二进制原理,电平分别对应二进制中的0和1。盘面比较特殊,用磁极的正负代替1和0。

  一般来说,我们用的是有图文界面的电脑,人类可以直接理解。而人类和计算机的交流是通过工具转换成0101,让计算机能够理解人类的语言。

  这个过程,总的来说和翻译是一样的。人类字节——由各种输入设备翻译——是计算机可以理解的二进制01

  * * *这个翻译过程是人的字节,对应的是计算机特有的数字。这个过程称为字节编码。***

  二、Python运行过程中涉及的字节编码

  排名第一。我们Python编程保留的py文件都是由英文或中文字节组成的,

  请仔细看pycharm的右下角。我们的。py文件根据特定的编码格式保存。见下图。我们使用UTF 8编码。

  # 2 Python中的数据类型String byte string,全部由字节组成,

  当我们运行时,字符串字节字符串会按照。py文件存档(UTF-8),成为机器可以识别的01010101指令。

  三、字节编码的发展历史和分类

  电脑首先是由使用英语的美国人发明的。为了方便计算机通信,美国人创造了第一个用于人机交互翻译的字节编码表ASCII,规定了ASCII表中的特殊数字与26个英文字母、0-9个阿拉伯数字、标点符号和一些特殊字节的一一对应关系。在计算机诞生之初,一个字节最多只能用8个二进制数来表示,即8位(s)=1字节。

  请看上图。一个字节由8位组成。我们知道1bit只有两种状态,要么是0,要么是1,但是如果把这8位组合起来能有多少种变化?根据我们的数学知识,应该是2x2x2x2x2x2x2,也就是2的8次方。有256种不同的状态,所以ASCII码最多只能表示为256字节。

  在英语的世界里,有256种特殊字节,足以涵盖各种英语字节,然后用字节组成单词,用单词组成句子,让人与计算机无障碍交流。

  然而,随着全球化的发展和科技的传播,地球上说“非英语”的国家和人民也需要使用计算机。每个国家根据自己的语言,模仿美国人创建ASCII的方法,把自己语言的字节对应到特殊数字上。

  以语文为例。我们国家规定的标准是gb2312编码,规定了汉字与特殊数字的一一对应关系。

  但汉语博大精深,汉字数量众多,2的8次方有256个变体,根本无法覆盖所有的中文字节。因此,我们用2个字节(2字节=8bits 8bits)来表示一个汉字,总共用了16位。2的16次方是65536,也就是说gb2312编码表可以对应65536个汉字,我们日常生活中有3000多个汉字。gb2312编码够我们用了。

  同样,日本规定了Shift_JIS码,韩国使用Euc-kr码。

  但结合实际使用,我们的文档中不仅包含中文字节,有时还包含英文字节、日文字节或韩文字节。那么这个文件,无论遵循哪个国家的标准,都会出现乱码(因为目前的各种标准都只是规定了字节和数字的对应关系,包括一个国家的字符。如果只采用一个国家的编码格式,解析其他国家的文字时会出现乱码)。

  这时,问题就出现了。精通18种语言的周晓谦虚地用8种语言写了一个文档,那么这个文档按照哪个国家的标准都会出现乱码(因为目前所有的标准都只规定了字节和数字的对应关系,包括自己国家的文字。如果只采用一种国家编码格式,在解析其他语言时会出现乱码)。

  因此,迫切需要一个世界标准(可以包含世界上所有的语言),于是unicode应运而生。

  ASCII (8位二进制)中的一个字节代表一个字节。

  Unicode常用2个字节(16位二进制)表示一个字节,生僻字需要4个字节。

  示例:

  字母“X”在ascii中表示为十进制120和二进制0111 1000。

  汉字“中”已经超出了ASCII编码的范畴。Unicode编码是十进制20013,二进制0100110 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编码可以节省空间:

  字节

  美国信息交换标准代码

  统一码

  UTF-8

  A

  01000001

  00000000 01000001

  01000001

  中间

  x

  01001110 00101101

  11100100 10111000 10101101

  从上表还可以发现,UTF-8编码还有一个额外的好处,那就是ASCII编码实际上可以看作是UTF-8编码的一部分。因此,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

  基本代码的类型和情况如下:

  ASCII占用1个字节,只支持英文。

  GB2312占用2个字节,只支持6700个汉字。

  GBK占用2个字节,支持21000个汉字升级GB2312。

  日本字符字节

  Ks_c_5601-1987韩国代码

  TIS-620泰国代码

  因为每个国家都有自己的代码,所以对应关系也涵盖了自己的字符。但以上编码都有国家和地区的局限性,只覆盖了自己的字符,无法与其他国家的字符形成对应关系。

  Unicode的时候到了!——“我的Unicode不是针对某个代码,我是说地球上所有的国家代码都是辣鸡!”

  Unicode占用2-4个字符,已经记录了136,690个字符,并且一直在扩展。

  Unicode有两个用途:

  1.直接支持全球所有语言,全球各个国家的编码表都可以丢弃。

  2.Unicode包含了世界上所有国家代码的映射关系。

  Unicode解决了字符和二进制的对应关系,但是用Unicode表示一个字符就是浪费空间。

  在Python中,字符串是按照unicode处理的,因为计算机的内存是如此之大,仅仅是字符串就可以轻松解决。

  但是在网络传输和硬盘存储中,数据量增加1-3倍是不能容忍的。

  为了解决存储和网络传输的问题,出现了UTF-8,对unicode进行转换和压缩,以节省硬盘存储和网络传输的空间。

  1.UTF-8用1-4个字节动态表示所有字符;优先考虑一个字符,如果不能满足,则添加另一个字符。英语是一个字符,欧洲语言是两个字符,东亚是三个字符,其他特殊字符是四个字符。

  2.UTF-16使用2或4个字节来表示所有字符,优先使用2个字符,如果不够,则使用4个字符。

  3UTF-32使用4个字节来表示所有字符。

  概要:UTF是一种Unicode编码方案,可以节省存储和网络传输的空间。

  Unicode包含了与世界上所有国家代码的映射关系。你可以在Unicode编码表中找到世界上任何国家的任何二进制对应词;

  无论你的软件是法语、英语还是中文,它都是以Unicode格式加载到内存中的。

  四。Python3执行期间的编码

  Python3中的三种代码执行过程:

  1.解释器找到代码文件,根据文件中定义的代码将代码串加载到内存中,并转换成unicode;

  2.根据语法规则解释代码串。

  3.所有可变字符都将在unicode代码中声明。

  但是在Python2中,它的默认编码不是unicode,而是ASCII。

  为什么?因为unicode是1994年才诞生的,而python作者Guiju是1989年开始构建Python的。

  Unicode是晚辈,没办法。先用祖先ASCII编码吧。直到Python3,年轻一代的unicode才取代了ASCII。

  Python2中有一种特殊类型的unocide,用作区分和ASCII祖先区分;

  unicode和各种字符的关系如下:unicode到string是编码,string到unicode是解码。

  动词(verb的缩写)Python中的字节类型

  Bytes是一种字节类型,它将8位组合成一个字节,并将二进制形式转换为十六进制表示。这种转换只是让人类读得更好。

  Python2中的字符串应该叫字节串,bytes==str,而Python3中是unicode==str。

  Python中唯一的unicode类型,解码后会变成Unicode。

  在Python3中,字符串str被指定为unocide,文件的默认编码是utf-8。

  在Pyhton3中,除了将字符串的编码改为unicode之外,还区分了str和bytes。str是unicode格式的字符串,Bytes是简单的二进制字符。

  转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 如何对python字符串中字符进行替换,python 替换字符串
  • 如何对python字符串中字符进行替换,python 替换字符串,python字符串替换的2种方法
  • Python字符串转变量,python输出字符和数字变量
  • Python字符串转变量,python输出字符和数字变量,Python将字符串常量转化为变量方法总结
  • python字符串讲解,菜鸟教程python字符串
  • python字符串讲解,菜鸟教程python字符串,python 字符串详解
  • python字符串根据字符截取,python字符串的切片操作
  • python字符串根据字符截取,python字符串的切片操作,Python中的字符串切片(截取字符串)的详解
  • python中字符串的切片,python字符串
  • python中字符串的切片,python字符串,Python中字符串切片详解
  • python 去除字符串中的空格,python字符串去除空格
  • python 去除字符串中的空格,python字符串去除空格,Python 字符串去除空格的五种方法
  • ,,Python字符串拼接的4种方法实例
  • ,,Python字符串匹配之6种方法的使用详解
  • python编写函数去掉字符串中的空格,python字符串怎么去空格
  • 留言与评论(共有 条评论)
       
    验证码: