千家信息网

python字符串和编码举例分析

发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,本篇内容主要讲解"python字符串和编码举例分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python字符串和编码举例分析"吧!字符串属于一种数据类
千家信息网最后更新 2025年01月26日python字符串和编码举例分析

本篇内容主要讲解"python字符串和编码举例分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python字符串和编码举例分析"吧!

  字符串属于一种数据类型,字符串比较重要的就是编码问题

  先看下一些编码的例子

  举例子说下各种编码的区别,优缺点:

  ASCII:美国人发明,比如大写字母A编码是65,小写字母z编码是122;一般一个字节

  GB2312:中国发明,把中文加了进去

  Unicode:把所有语言都统一到一套编码里;一般用两个字节表示一个字符

  但是这样也会有问题,所以现在基本上都用UTF-8编码。用Unicode编码虽然可以解决乱码问题,但是如果全部是英文的话,用Unicode编码比用ASCII编码多一倍的存储空间,在存储和传输上就十分不划算。

  所以,出现了UTF-8编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文被编译成1个字节,汉字是3个字节,这样一来基本都解决了问题。网页基本上都是UTF-8编码。

  python的字符串

  我用的是python3版本,字符串是以Unicode编码的,所以python的字符串支持多语言,举个例子:

  >>> print('包含中文的English')

  包含中文的English

  对于单个字符,python使用ord()函数获取字符的整数表示,chr()函数把编码转换为对应字符,举个例子:

  >>> ord('A')

  65

  >>> ord('中')

  20013

  >>> chr(66)

  'B'

  >>> chr(25991)

  '文'

  >>> chr(10000)

  '✐'

  如果想用chr()函数的话,首先要知道对应内容对应的编码。如果知道字符的整数编码还可以用十六进制来写:

  >>> '\u4e2d\u6587'

  '中文'

  上面这两种写法是等价的,python的字符串类型是str,内存里以Unicode来表示,一个字符对应若干个字符,如果要在网上传输,或者保存到磁盘,就得把str变成以字节为单位的bytes。

  在python里用带b前缀的单引号或双引号来表示bytes类型的数据,举个例子:

  x = b'ABC'

  注意!!'ABC'和b'ABC'是不一样的。'ABC'是str类型,后面是bytes,bytes的每个字符只占用一个字节。

  用Unicode表示的str通过encode()方法可以编码为指定的bytes,举个例子:

  >>> 'ABC'.encode('ascii')

  b'ABC'

  >>> '中文'.encode('utf-8')

  b'\xe4\xb8\xad\xe6\x96\x87'

  >>> '中文'.encode('ascii')

  Traceback (most recent call last):

  File "", line 1, in

  '中文'.encode('ascii')

  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编码的范围。

  在bytes中,无法显示为ASCII字符的字节,用\x##显示,所以如果从网络上或磁盘上读取了字节流,读到的数据是bytes。如果想把bytes转换为str,需要使用decode()方法,举个例子:

  >>> b'ABC'.decode('ascii')

  'ABC'

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

  '中文'无锡男科医院 http://www.bhnkyixue.com/

  注意,如果bytes中含有无法解码的字节,decode()方法会报错!!!

  如果bytes中只有一小部分无效的字节,可传入errors='ignore'用来忽略错误的字节,举个例子:

  >>> b'\xe4\xb8\xad\xff'.decode('utf-8')

  Traceback (most recent call last):

  File "", line 1, in

  b'\xe4\xb8\xad\xff'.decode('utf-8')

  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte

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

  '中'

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

  >>> len('ABC')

  3

  >>> len('中文')

  2

  如果要计算bytes包含多少个字符,也可以用len(),此时计算的是字节数,举个例子:

  >>> len(b'ABC')

  3

  >>> len(b'\xe4\xb8\xad\xe6\x96\x87')

  6

  >>> len('中文'.encode('utf-8'))

  6

  大家仔细看,一个中文字符经过UTF-8编码后通常占用3个字节,一个英文字符只占用一个字符。

  但是在实际操作的时候,经常会用到str和bytes的互相转换,为了避免乱码,我们在编码的时候就指定使用UTF-8编码:

  ps:当然python也支持其他编码方式,比如把Unicode编码成GB2312,但是太麻烦了!!!

  # -*- coding: utf-8 -*-

  这一行注释不是没用,而是告诉python解释器,按照UTF-8编码读取源代码,否则在代码中写的中文输出可能会有乱码。

  如果.py文件本身使用UTF-8编码,并且指定了:# -*- coding: utf-8 -*-,那么打开命令提示符测试就可以正常显示中文。

  格式化

  一般还有个如何输出格式化的字符串的问题,在python中使用%实现,举个例子:

  >>> 'Hello, %s' % 'world'

  'Hello, world'

  >>> 'Hi, %s, you have $%d.' % ('jack', 1000000)

  'Hi, jack, you have $1000000.'

  所以,%运算符是用来格式化字符串的,在字符串里面%s表示用字符串替换,用%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,如果只有一个%?,括号可以省略。

  常用占位符有下面这些:

  还有,格式化整数和浮点数还可以指定是否补0和整数与小数的位数。

  如果不知道用什么,%s永远可以起作用,它会把任何数据类型转换为字符串,举个例子:

  >>> 'Age: %s. Gender: %s' % (25, True)

  'Age: 25. Gender: True'

  r如果字符串里面的%是一个普通字符的话,就需要转义一下了,用%%来表示一个%,举个例子:

  >>> 'growth rate: %d %%' % 7

  'growth rate: 7 %'

  format()

  还有一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}等等,

  这种方式写起来比%麻烦,举个例子:

  >>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)

  'Hello, 小明, 成绩提升了 17.1%'

  格式化字符串的时候,可以用python的交互式环境测试,比较方便。

到此,相信大家对"python字符串和编码举例分析"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

字符 编码 字符串 中文 例子 字节 UTF-8 方法 格式 整数 类型 问题 内容 函数 数据 英文 分析 乱码 时候 只有 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 常量和数据库字段映射 网络安全活动周活动方案 mdf如何导入到数据库 access数据库浏览器 黑龙江服务器机柜生产厂家 美国特价vps服务器 国外学习网络技术的网站 河南网通服务器租用 idea社区版能连数据库吗 nc网络安全防护系统 维普数据库与哪个数据库最相似 服务器多个cpu如何协作 计算机网络安全研究大专 软件开发第三方银行接口 中兴有网络技术支持网站吗 提供优质软件开发 逊克im即时通讯软件开发 杭州多媒体博物馆软件开发 数据库智能感知功能在哪 大飞哥网络安全公开课天融信 计算机三级网络技术考点分布 浏览器定位服务器 滴滴顺风车牵引出的网络安全 使命召唤16总连不上服务器 北碚区一站式软件开发流程市场价 保定久展医药软件开发部门 霍林郭勒软件开发系统 上市公司网络安全等级保护 受欢迎的数据库安全 人民群众的网络安全素养
0