心蓝的博客 心蓝的博客
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

心蓝

人生苦短,我用python
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • 编程基础

  • python开发环境搭建

  • 基本数据类型

  • 程序流程控制

  • 函数与代码复用

  • 面向对象

  • 模块和包

  • 文件IO操作

    • 文件概述
    • 字符编码
    • 字节类型
      • 编码与解码
        • 编码
        • 解码
    • python读取文件
    • python写文件
    • 文件指针
  • python零基础入门
  • 文件IO操作
心蓝
2022-12-23
目录

字节类型

# 字节类型

python中使用字节类型(bytes)来表示二进制信息,它是由单个字节构成的不可变序列。

字节类型的字面量的语法与字符串大致相同,只是添加了一个前缀b。

字节类型的字面量中只允许ASCII字符。

任何超过127的二进制值使用前缀\x和十六进制来表示。

# 编码与解码

字符串转换为对应的编码称为编码,根据字符编码转换为字符叫解码。

# 编码

字符串方法.encode()可以将字符串转换为对应的编码的bytes对象。

>>> res = 'abc123'.encode('ascii')
>>> res
b'abc123'
>>> type(res)
bytes
1
2
3
4
5

因为都是ascii码字符,使用本身字面量来表示,所以看起来和字符串没有什么区别,除了多了一个前缀b。

>>> res = '中'.encode('gbk')
>>> res
b'\xd6\xd0'
>>> len(res)
2
1
2
3
4
5

中字在gbk中的编码为54992,二进制表示为:

>>> bin(54992)
'0b1101011011010000'
1
2

总共16位,需要两个字节来表示,按照16进制表示第一个字节为:

>>> hex(0b11010110)
'0xd6'
1
2

第二个字节为:

>>> hex(0b11010000)
'0xd0'
1
2

换成\x前缀后为:

'\xd6\xd0'
1

是不是跟上面的结果一样。

>>> res = '中'.encode('utf-8')
b'\xe4\xb8\xad'
1
2

utf-8码,三个字节表示一个汉字。

# 解码

bytes对象方法.decode()可以将字节对象转换为对应编码的字符串对象。

>>> b'\xd6\xd0'.decode('gbk')
'中'
1
2

注意:不是所有的二进制信息都可以解码为字符,只有以字符编码组织的二进制信息才可以解码为字符。当二进制信息不是以字符编码组织的,或者使用错误的字符编码进行解码会抛出异常。

>>> b'\xd6\xd0'.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
1
2
3
4

注意:为了解决字符串不一致的问题,python3中,所有的字符串在内存中都是以unicode来表示的,其它的编码再通过uniocde进行转换。

>>> '中'.encode('unicode_escape')
b'\\u4e2d'					# unicode
>>> b'\\u4e2d'.decode()
>>> b'\\u4e2d'.decode('unicode_escape')
'中'
1
2
3
4
5

本文完,感谢你的耐心阅读,如有需要可加我微信,备注「博客」并说明原因,我们一起进步,下次见。

上次更新: 2022/12/23, 19:09:35
字符编码
python读取文件

← 字符编码 python读取文件→

最近更新
01
requests让接口测试如此简单 原创
03-31
02
最简明的python正则教程
03-30
03
pycharm激活码
12-30
更多文章>
Theme by Vdoing | Copyright © 2019-2025 心蓝
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式