专栏首页浪淘沙Python学习总结4--字符串和编码

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

一、编码历史     由于计算机是美国人发明的,因此,最早只有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前缀的单引号或双引号表示
x = b'ABC'

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

>>> '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’忽略错误的字节:

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

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

>>> len('ABC')
3
>>> len('中文')
2

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

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

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

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

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

三、格式化

  1. 在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:
    >>> '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%'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Springmvc学习总结

    4、在web.xml中配置SpringMVC的前端控制器DispatcherServlet

    曼路
  • java设计模式-适配器

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 类适配器模式

    曼路
  • Python学习总结1--初识Python

    学习Python大家可以到 廖雪峰老师的网站 学习基础知识 下面是我自己学习python的总结和笔记 一、使用Python的优点 1.高...

    曼路
  • Web前端学习 第6章 jQuery Ajax 3 Ajax第三方模块

    其实在实际项目开发中,我们并不需要自己去封装,已经有很多成熟的Ajax第三方模块了,直接使用即可。

    学习猿地
  • 【融职培训】Web前端学习 第6章 jQuery Ajax 3 Ajax第三方模块

    其实在实际项目开发中,我们并不需要自己去封装,已经有很多成熟的Ajax第三方模块了,直接使用即可。

    学习猿地
  • 域名yg.cc以10.2万元的价格结拍,可搭建“摇滚”音乐平台

    近日,域名市场交易了不少精品域名,比如qrf.com、yg.cc等,其中qrf.com拍出15.4万元。

    躲在树上的域小名
  • beego解决跨域问题

    Happyjava
  • SharePoint 中时间轴 Timeline的实现

    客户需要在OA中实现每日动态功能,能够记录每一位员工的每天的工作动态,我很快想到了时间轴,因为时间轴能很直观的现实员工每一刻的动态。就像Facebook的Ti...

    用户1161731
  • android仿iphone的地区选择

    最近项目要做一个,类似淘宝手机客户端的,选择收货地址的三级联动滚动选择组件,下面是它的大致界面截图: ? 在IOS中有个叫UIPickerView的选择器,...

    xiangzhihong
  • python3--IO模型,阻塞,非阻塞,多路复用,异步,selectors模块

    结论:协程任务开启,并不一定会执行,它需要I/O(阻塞)才能执行,上面代码的time.sleep(1)模拟了I/O(阻塞)

    py3study

扫码关注云+社区

领取腾讯云代金券