python字符串编码解码基础知识

python字符串编码解码基础知识

python通过ord©获取字符c的unicode的编码值,为整数。通过chr(i)获取i对应的unicode的字符。通过str.encode()将字符串编码为原始字节,b.decode()将原始字节解码为字符串。

1 字符串基础知识

python通过ord©获取字符c的unicode的编码值,为整数。

通过chr(i)获取i对应的unicode的字符。

1.1 字符编码方法

ASCII码定义0-127的字符代码,每个字符存储在一个8位的字节中。

# 内置函数 描述
1 ord© 返回字符c的unicode的编码值,为整数
2 chr(i) 返回unicode编码为i的字符
3 help(encodings) 先import encodings,再help,查看python支持的编码名称

从字符串编码为原始字节,从原始字节解码字符串。

# 名称 描述
1 编码 根据编码名称,把字符串翻译为原始字节
2 解码 根据编码名称,把原始字节翻译为字符串

示例

python 复制代码
>>> ord('梯')
26799
>>> chr(26799)
'梯'

1.2 python字符串类型

# 版本 描述
1 py2.x str表示8位文本和二进制数据
2 unicode表示宽字符unicode文本
3 py3.x str表示unicode文本
4 bytes表示二进制数据
5 bytearray,可变的bytes类型

1.3 文本和二进制文件

# 模式 描述
1 bytes和二进制模式 处理图像文件、解压的打包数据、设备数据流
2 str和文本模式 用于程序输出、HTML、CSV、XML文件

2 python3.0的字符串应用

2.1 常量和基本属性

# 项目 描述
1 'xxx'和"xxx" 创建str,单字节或者更长的字节,存放字符串
2 '''xxx'''和"""xxx""" 创建str
3 'xxx'和"xxx"前面加b或B 创建bytes,单字节,存放字符对应原始字节的整数
4 '''xxx'''和"""xxx"""前加b或B 创建bytes

示例

python 复制代码
>>> b=b'abc' # 返回每个字符的原始字节的整数
>>> s='abc'
>>> type(b),type(s)
(<class 'bytes'>, <class 'str'>)
>>> b,s
(b'abc', 'abc')
>>> b[0],s[0]
(97, 'a')
>>> b[1:],s[1:]
(b'bc', 'bc')
>>> list(b),list(s)
([97, 98, 99], ['a', 'b', 'c'])
# bytes 和 str 不可修改
>>> b[0]='d'
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    b[0]='d'
TypeError: 'bytes' object does not support item assignment
>>> s[0]='d'
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    s[0]='d'
TypeError: 'str' object does not support item assignment
>>> c=b'''
abc
def
'''
>>> c
b'\nabc\ndef\n'

2.2 转换

# 项目 描述
1 str.encode()和 bytes(s,encoding) 编码,把字符串转换为bytes形式,根据str创建一个bytes。
2 bytes.decode()和 str(b,encoding) 解码,把bytes转换为字符串形式,根据bytes创建一个str。
3 sys.getdefaultencoding() 查看系统默认编码

描述

str.encode(encoding),根据编码名encoding将字符串str编码为原始字节,encoding默认为utf-8。

bytes(s,encoding),根据编码名encoding将字符串s编码为原始字节,encoding必填。

bytes.decode(encoding),根据编码名encoding将原始字节解码为字符串,encoding默认为utf-8。

str(b,encoding),根据编码名encoding将原始字节解码为字符串,encoding不填则打印原始字节。

示例

python 复制代码
>>> import sys
# 查看系统
>>> sys.platform
'win32'
# 查看系统默认编码
>>> sys.getdefaultencoding()
'utf-8'
>>> s='梯'
# encode 和 bytes 编码,字符串转原始字节
>>> s.encode()# encoding 默认为 utf-8
b'\xe6\xa2\xaf'
>>> s.encode(encoding='utf-8')
b'\xe6\xa2\xaf'
>>> s.encode(encoding='gbk')
b'\xcc\xdd'
>>> bytes(s,encoding='gbk')
b'\xcc\xdd'
>>> bytes(s,encoding='utf-8')
b'\xe6\xa2\xaf'
# decode 和 str 解码,原始字节转字符串
>>> b=b'\xe6\xa2\xaf'
>>> b.decode()
'梯'
>>> str(b,encoding='utf-8')
'梯'
# str() 没有 encoding ,则 进行打印
>>> str(b)
"b'\\xe6\\xa2\\xaf'"
# bytes() 没有 encoding ,则 报错
>>> bytes(s)
Traceback (most recent call last):
  File "<pyshell#62>", line 1, in <module>
    bytes(s)
TypeError: string argument without an encoding
相关推荐
Juchecar20 分钟前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805130 分钟前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_31 分钟前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机7 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机8 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机8 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机8 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i8 小时前
drf初步梳理
python·django
每日AI新事件8 小时前
python的异步函数
python
这里有鱼汤10 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python