Python中的字符串操作和编码Unicode详解


Posted in Python onJanuary 18, 2017

本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧。

字符串类型

str:Unicode字符串。采用''或者r''构造的字符串均为str,单引号可以用双引号或者三引号来代替。无论用哪种方式进行制定,在Python内部存储时没有区别。

bytes:二进制字符串。由于jpg等其他格式的文件不能用str进行显示,所以才用bytes来表示,bytes的每个字节为一个0-255的数字。如果打印的时候,Python会把能够用ASCII表示的部分显示为ASCII,这样方便阅读。bytes几乎支持除了格式化以外的所有str的方法,甚至包括了re模块

bytearray() :二进制可原地变动的字符串。

utf-8编码范围

范围 字节数 存储格式
0x0000~0x007F (0 ~ 127) 1字节 0xxxxxxx
0x0080~0x07FF(128 ~ 2047) 2字节 110xxxxx 10xxxxxx
0x0800~FFFF(2048 ~ 65535)  3字节 1110xxxx 10xxxxxx 10xxxxxx
0x10000~1FFFFFF(65536 ~ 2097152) 4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x2000000~0x3FFFFFF 5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x4000000~0x7FFFFFFF)  6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

字节顺序标记BOM

BOM是byte order marker的缩写,

指定编码写入时的规则

Python在使用'utf-8'编码写入文件时不会写入BOM头,但是如果指定编码'utf-8-sig'则会迫使Python写入一个BOM头。

使用'utf-16-be'不会写入一个BOM头,但是采用'utf-16'则会写入一个BOM头。

>>> open('h.txt','w',encoding='utf-8-sig').write('aaa')
3
>>> open('h.txt','rb').read()
b'\xef\xbb\xbfaaa'
>>> open('h.txt','w',encoding='utf-16').write('bbb')
3
>>> open('h.txt','rb').read()
b'\xff\xfeb\x00b\x00b\x00'
>>> open('hh.txt','w',encoding='utf-16-be').write('ccc')
3
>>> open('hh.txt','rb').read()
b'\x00c\x00c\x00c'
>>> open('h.txt','w',encoding='utf-8').write('ddd')
3
>>> open('h.txt','rb').read()
b'ddd'

读取时的规则

如果指定了正确的编码,那么BOM会忽略,否则BOM会显示为乱码或者返回异常。

>>> open('h.txt','r').read()
'锘?dd'
>>> open('h.txt','r',encoding='utf-8-sig').read()
'ddd'

编码与解码

  • chr和ord
>>> ord('中') #20013
>>> chr(20013) #'中'
  • 把Unicode硬编码进字符串中。

       '\xhh':用2位十六进制来表示一个字符

       '\uhhhh':用4位十六进制来表示一个字符:

       '\Uhhhhhhhh':用8位十六进制来表示一个字符

       >>> s = 'py\x74h\u4e2don' #'pyth中on'

str和bytes, bytearray进行转换

str.encode(encoding='utf-8')

bytes(s,encoding='utf-8')

bytes.decode(encoding='utf-8')

str(B, encoding='utf-8')

bytearray(string, encoding='utf-8')

bytearray(bytes)

文档编码声明

Python默认使用utf-8编码。

# -*- coding: latin-1 -*- :表示声明文档为latin-1编码。

帮助函数

sys.platform  #'win32'
sys.getdefaultencoding() # 'utf-8'
sys.byteorder  #'little'
s.isalnum()  #s表示字符串
s.isalpha()
s.isdecimal
s.isdigit()
s.isnumeric()
s.isprintable()
s.isspace()
s.isidentifier() #如果字符串可以用作变量名,那么返回True
s.islower()
s.isupper()
s.istitle()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
让python的Cookie.py模块支持冒号做key的方法
Dec 28 Python
简单介绍Python中的decode()方法的使用
May 18 Python
Python中subprocess的简单使用示例
Jul 28 Python
Python利用IPython提高开发效率
Aug 10 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
Django中反向生成models.py的实例讲解
May 30 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
关于Python中异常(Exception)的汇总
Jan 18 #Python
python:socket传输大文件示例
Jan 18 #Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 #Python
python实现下载整个ftp目录的方法
Jan 17 #Python
ansible作为python模块库使用的方法实例
Jan 17 #Python
python 基础教程之Map使用方法
Jan 17 #Python
Python获取某一天是星期几的方法示例
Jan 17 #Python
You might like
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php绘制一条直线的方法
2015/01/24 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
javascript跨域请求包装函数与用法示例
2016/11/03 Javascript
js选项卡的制作方法
2017/01/23 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python中的filter()函数的用法
2015/04/27 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
python黑魔法之参数传递
2016/02/12 Python
django 消息框架 message使用详解
2019/07/22 Python
python通过链接抓取网站详解
2019/11/20 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Python中Qslider控件实操详解
2021/02/20 Python
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
教师研修随笔感言
2015/11/18 职场文书
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript