zoukankan      html  css  js  c++  java
  • Python字符编码补充

    字符编码:

    Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的。

    这次是要彻底解决Python字符编码的问题!!!

    1 字符编码的发展过程:

    	1 、ASCII :256 美国需要128个字符,只需要7位   --美国
    	2、扩展ASCII : 8 比特位  --拉丁
    	3、GB2312 :
    			中文扩展ASCII 两个字节都大于127   --中国
    	4、GBK :
    		两个字节,第一个字节大于127
    	
    	5、Unicode是一种编码方式  两个字节 16
    		至少两个字节:2^16 = 65536   
    		在Unicode基础上产生utf-8,可变长字符编码
    				英文 1个字节,非英文2-6
    

    2 数据的存储形式

    内存中的统一是Unicode编码数据的存储是utf-8(硬盘和网络传输)

    	存储数据使用utf-8占用空间少
    	传输数据快
    	
    	Unicode(明文对应二进制)这个二进制是16进制格式的
    	utf-8(二进制对应二进制)
    

    3 程序执行前:

    普通软件的执行是通过调用操作系统,让CPU从内存中获取数据,然后执行。

    	文本编辑器的例子:(这是文件的编码)
    	**存储:**
    		明文---Unicode(内存中)------存储到本地--编码成utf-8的格式存放在硬盘上
    	**读取:**
    		utf-8解码成Unicode,Unicode解码成中文
    

    4 程序执行中:

    Python解释器的有调用执行的功能,首先加载到内存职工需要解码,用什么编码就用什么解码

    程序执行中主要是针对的是字符串,Python解释器是逐行执行,文件中的字符串有相应的编码格式,这是最重要的内容。

    Python2:

    	开头的声明,是解码的声明#coding:utf-8  按照utf-8来解码
    	Python2默认是ASCII码进行解码
    

    1 str (数据类型的名字): bytes 数据
    定义一个字符串就是字节数据

    2 unicode (数据类型的名字): unicode将二进制数据编码成另一种二进制数据 (如utf=8)
    **Unicode数据前面有u前缀 **

    文件的执行编码

    s ="中文"
    print repr(s)  #repr函数是将数据显示成字符串的方式
    

    结果:
    **'xe4xb8xadxe6x96x87' ** 现在是字节数据

    s =u"中文"    #  在字符串的前面加上u  代表Unicode数据类型
    print repr(s)
    

    结果是:
    u'u4e2du6587' Unicode数据类型

    字节数据的解码

    #coding:utf-8
    #Python2.7
    
    s1 = '中文'
    s2 = u'中文'
    
    # print repr(s)
    print type(s1)
    print type(s1.decode("utf-8"))  # 将字节数据(数据类型是str)通过utf-8解码-->unicode数据类型
    
    

    结果:
    type 'str'
    type 'unicode'

    数据的编码

    #coding:utf-8
    #Python2.7
    
    s1 = '中文'
    s2 = u'中文'
    
    # print repr(s)
    # print type(s1)
    # print type(s1.decode("utf-8"))  # 将字节数据(数据类型是str)通过utf-8解码-->unicode数据类型
    
    print type(s2)
    print type(s2.encode("utf-8"))  #  将Unicode数据(数据类型是Unicode)通过utf-8编码-->str数据类型
    print s2
    							   
    

    结果是:

    type 'unicode'
    type 'str'
    中文

    Python2给解 释器的是字节数据
    

    python3;
    默认是Unicode数据 就是str

    1 str(数据类型的名字): unicode 数据

    2 bytes(数据类型名字): bytes 数据

    	将Unicode数据encode
    	将字节数据decode
    

    完全把字节类型和字符类型分开了,不能混用

    注意点:

    	1 、Unicode   gbk utf-8 都是编码规则
    	2 、内存中是Unicode   Unicode作为转换的中转站
    

    关于终端的乱码问题:
    在pycharm中执行的时候是通过pycharm的软件执行的,pycharm终端默认是utf-8,Windows的cmd是通过win系统编码格式执行的,win默认是gbk,解码的时候可以在字符的前面添加u,或者解码的方式改成coding:gbk

  • 相关阅读:
    oldboy_09_03day_test1
    oldboy_09_03day
    java消息队列
    es6语法([...arr], set/map数据结构,数组扩展,箭头函数等)
    Angular 2 Expression Changed After It Has Been Checked Exception
    jQuery之Deferred对象详解
    js面向对象:Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
    Angular 4.x 动态创建组件
    JS中this的四种用法
    typescript主键自增长
  • 原文地址:https://www.cnblogs.com/Python666/p/6726938.html
Copyright © 2011-2022 走看看