python编码问题

各种编码在内存中所占的大小:

ascii:    英文:8bit (1B)

uft-8:    英文:8bit (1B)
          中文:24bit (3B)

GBK:      英文:8bit (1B)
          中文:16bit (2B)

unicode:  英文:32bit (4B)
          中文:32bit (4B)

python3代码执行过程:

  1. 解释器找到代码文件(文件以utf8/GBK..存储),
  2. 把代码字符串按文件头定义的编码进行解码到内存,转成unicode
  3. 所有的变量字符都会以unicode编码声明(str的编码方式就是unicode)

unicode只在内存中进行显示, 传输和存储需要用到utf8/GBK.., 所以必须转成utf8/GBK..

str和bytes的区别就是编码方式的不同:


str(unicode编码)      ==>     bytes(utf8/GBK..)       ==>         存储, 传输
bytes = str.encode('utf-8')               # 编码
str = bytes.decode('utf-8')               # 解码

python3中str和bytes表现和编码:

英文:
    str:    表现方式==>'a'
            编码方式==>0101      unicode

    bytes:  表现方式==>b'a'
            编码方式==>0101      utf8/GBK..


中文:
    str:    表现方式==>'中'
            编码方式==>0101      unicode

    bytes:  表现方式==>b'x\e9'
            编码方式==>0101      utf8/GBK..

在python2中:

  1. u'xxx'为unicode对象, 就是python3中的str
  2. bytes和str是同一个类型
s = 'a'
print (s, type(s))              # 'a', <type 'str'>


s = u'中文'
print(s, type(s))               # u'\u4e2d\u6587', <type 'unicode'>
# 编码变成utf-8, 一个中文三个字节
s1 = s.encode('utf-8')
print(s1, type(s1))             # '\xe4\xb8\xad\xe6\x96\x87', <type 'str'>


# bytes和str是同一个类型
s1 = 'a'
s2 = bytes('a')
print(s1 is s2)                 # True
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 几个基本概念 bit二进制位, 是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只...
    西电大侠阅读 3,600评论 1 8
  • 继上一篇文章字符集和编码详解总结了常见字符编码后,这篇文章会对python中常见的编码问题进行分析和总结。由于py...
    __七把刀__阅读 2,913评论 0 6
  • 昨天一张,哎,看电影忘记写简书了,但是还是总感觉差点东西,早上补起来。
    杨奶茶阅读 140评论 0 0
  • 这是第三阶段了,也就是老师所说,迎娶新娘(入洞房)了!!!一切准备就是为了成交!任何的方法,任何的经验,给到你,你...
    付爱宝湘君阅读 516评论 0 0
  • 不知道是不是因为越胖了以后就越懒,吃的就越多。每天都再说一定要少吃,每天要多运动。结果却是依旧暴饮暴食,到...
    满满依依阅读 302评论 0 0