编码

一、is和==的区别

  is比较内存地址,id( )获取内存地址

  ==比较两边的值

s1 = "哈哈"
s2 = "哈哈"
print(s1 == s2) # True
print(s1 is s2) # True 原因是有小数据池的存在 导致两个变量指向的是同一个对象
l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(l1 == l2) # True, 值是一样的
print(l1 is l2) # False, 值是假的

  小数据池:
      1、给数字和字符串使用,其他数据类型数据不存在
         数字小数据池的范围 -5 ~ 256 每次都使用同一个对象      

      2、如果是纯文字信息和下划线,那么这个对象会被添加到小数据池

         字符串中不能包含特殊符号,如果有特殊字符他们的内存地址就不一样

         字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致

二、编码和解码
  encode(编码方式) ---- 拿到明文编码后对应的字节

  字符串在传输时转化成bytes=> encode(字符集)来完成

s = "alex"
print(s.encode("utf-8")) # 将字符串编码成UTF-8
print(s.encode("GBK")) # 将字符串编码成GBK
结果:
b'alex'
b'alex'
s = "" print(s.encode("UTF-8")) # 中文编码成UTF-8 print(s.encode("GBK")) # 中文编码成GBK 结果: b'xe4xb8xad' b'xd6xd0'

  decode(编码方式) -----将编码后的字节解码成对应的明文

s = "我叫李嘉诚"
print(s.encode("utf-8")) #b'xe6x88x91xe5x8fxabxe6x9dx8exe5x98x89xe8xafx9a'

print(b'xe6x88x91xe5x8fxabxe6x9dx8exe5x98x89xe8xafx9a'.decode("utf-8")) # 解码

注意: 用什么进行编码就要什么进行解码 不然后会懵逼!

s = "我是文字"
bs = s.encode("GBK") # 我们这样可以获取到GBK的文字
# 把GBK转换成UTF-8
# 首先要把GBK转换成unicode. 也就是需要解码
s = bs.decode("GBK") # 解码
# 然后需要进⾏重新编码成UTF-8
bss = s.encode("UTF-8") # 重新编码
print(bss)

  ASCII 码

    不支持 中文
    支持 英文 数字 符号

    8位 一个字节

  gbk码 国标:
    支持 中文,英文,数字,符号
    英文 16位 二个字节
    中文 16位 二个字节
  unicode 万国码
    支持 中文,英文,数字,符号
    英文 32 位 四个字节
    中文 32位 四个字节
  utf-8 长度可变的万国码 最少用8位
    英文 8位 一个字节
    中文 24位 三个字节
Python3中 程序运行阶段 使用的是unicode 显示所有的内容
bytes类型
传输和存储都是使用bytes
pycharm 存储的时候默认是使用utf-8
注意: pycharm是个坑, 一个py文件中所有相同的字符串 一般都是使用一样的内存地址

原文地址:https://www.cnblogs.com/shanae/p/9409320.html