前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python学习总结4--字符串和编码

Python学习总结4--字符串和编码

作者头像
曼路
发布2018-10-18 15:26:01
3990
发布2018-10-18 15:26:01
举报
文章被收录于专栏:浪淘沙

一、编码历史     由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。     但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。     Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了     本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码

这里写图片描述
这里写图片描述

二、python的字符串

  1. 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符 >>> ord('A') 65 >>> chr(66) 'B'
  2. 由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。 Python对bytes类型的数据用带b前缀的单引号或双引号表示
代码语言:javascript
复制
x = b'ABC'

要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。       3. 以Unicode表示的str通过encode()方法可以编码为指定的bytes

代码语言:javascript
复制
>>> 'ABC'.encode('ascii')
b'ABC'

      4. 反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法: >>> b'\xe4\xb8\xad\xff'.decode('utf-8') Traceback (most recent call last): 如果bytes中只有一小部分无效的字节,可以传入errors=’ignore’忽略错误的字节:

代码语言:javascript
复制
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'

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

代码语言:javascript
复制
>>> len('ABC')
3
>>> len('中文')
2

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

  1. 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
代码语言:javascript
复制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的.

三、格式化

  1. 在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:
代码语言:javascript
复制
    >>> 'Hello, %s' % 'world' 'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.
  1. format() >>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 'Hello, 小明, 成绩提升了 17.1%'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年04月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档