文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python字符串和编码举例分析

2023-06-02 02:46

关注

本篇内容主要讲解“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字符串和编码举例分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯