对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。

1、如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x = b'ABC'

要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

以Unicode表示的str通过encode()方法可以编码为指定的bytes(为了节约内存),例如:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

在bytes中,无法显示为ASCII字符的字节,用\x##显示。

2、如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

如果bytes中包含无法解码的字节,decode()方法会报错:

>>> b'\xe4\xb8\xad\xff'.decode('utf-8')
Traceback (most recent call last):...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte

如果bytes中只有一小部分无效的字节,可以传入errors='ignore’忽略错误的字节:

>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'

要计算str包含多少个字符,可以用len()函数:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> len('ABC')
3
>>> len('中文')
2

len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

Python的字符串相关推荐

  1. Python 将字符串转为字典

    引言 在工作中遇到一个小问题,需要将一个 Python 的字符串转为字典,比如字符串: user_info = '{"name" : "john", " ...

  2. python 遍历字符串

    python 遍历字符串, 可以把字符串当作列表 来遍历即可 第一种方法使用for in 循环 # 使用for in str_a = "Hello,Python" for i in ...

  3. python删除指定位置的字符串_python去除区域 python删除字符串中指定位置字符

    python删除字符串中指定位置字符 原程序是这样的: ser = serial.Serial("/dev/ttyAMA0", 9600) def main字符串的话,你可以把他当 ...

  4. python 遍历字符串的每一个字符_Python之字符串的遍历的4种方式

    python的字符串遍历有4种方式: 1. 下标法 2. for in 3. iter内置函数 4. enumerate 其中下标法和enumerate适合需要判断后续字符的场景,比如循环到下标ind ...

  5. python输入字符串转换为公式_将python字符串转化成长表达式的函数eval实例

    爬一个网页时,要保存的数据都没有encode,就导致保存下来的中文都变成unicode了... 那么,怎么把一个表示字符串的unicode还原成unicode呢? 函数eval(expression) ...

  6. python 替换字符串中的元素

    python 替换字符串中的元素 def str_replace(old_str,old,new):"""在 old_str 字符串中,把 old 替换成 new:par ...

  7. python xml字符串和dict字典互转

    python xml字符串和dict字典互转 字典 转 xml def trans_dict_to_xml(data_dict):"""字典转xml:param data ...

  8. python 判断字符串是否包含另一个字符串_强烈推荐:Python字符串(string)方法整理(一)...

    作者:骏马金龙 原文地址: https://www.cnblogs.com/f-ck-need-u/p/9127699.html python中字符串对象提供了很多方法来操作字符串,功能相当丰富. p ...

  9. python反转字符串(简单方法)及简单的文件操作示例

    Python反转字符串的最简单方法是用切片: >>> a='123456' >>> print a[::-1] 654321 切片介绍:切片操作符中的第一个数(冒号 ...

  10. python统计字符串数字个数_python统计字符串中数字个数_后端开发

    python怎么随机生成奇数_后端开发 python随机生成奇数的方法:导入random模块,使用random模块生成随机数,然后判断生成的随机数是否为奇数,若是奇数就加入列表.使用此方法得到的列表包 ...

最新文章

  1. Playboy封面女郎、互联网第一夫人,程序员们的“钢铁审美”
  2. HDU - 6610 Game(带修莫队)
  3. mysql5.7卸载语句_MySQL5.7完全卸载
  4. 多规则策略如何筛选|视频版
  5. spring5源码-aop
  6. html5期末大作业:基于html+css+javascript+jquery+bootstarp响应式图书电商HTML模板网上书店(25页)
  7. javascript原生代码实现轮播图片
  8. bitvise ssh client 连接linux,推荐SSH客户端Bitvise SSH Client
  9. 数据库迁移工具flyway
  10. 基于ssm+vue+elementui的的ktv点歌管理系统
  11. 怎么判断两个多项式互素_多项式互素的等价条件
  12. 【Android】Android SurfaceFlinger之BufferQueue
  13. uniapp打包安卓apk增加推送UniPush工具hbuilder
  14. 20190919题目总结——选择题
  15. 计算机专业期末背书,据说大学学这些专业,期末考试最酸爽!
  16. 408 计算机组成,2018考研408计算机组成原理名词解释(6)
  17. python归一化和反归一化
  18. 基于PythonMagick实现png、jpg批量转ico
  19. samba客户端不能正常读写的排查步骤(Linux作为服务端)
  20. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

热门文章

  1. jquery效果 窗口弹出案例
  2. SQLServer 2005删除无主键表中的重复项
  3. python打出由边框包围的_python – 提取边框并将其保存为图像
  4. explain ref_你必须要掌握的MySQL命令:explain
  5. 【温故知新】CSS学习笔记(行高简介)
  6. 【PP主数据】工作中心介绍
  7. “损失厌恶心理”怎么影响了我们?
  8. SAP中Product Orders(生产订单)相关函数BAPI
  9. redis的hGetAll函数的性能问题
  10. SD客户主数据的增强user-exit SAPMF02D