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计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
python Flask实现restful api service
Dec 04 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Python模块WSGI使用详解
Feb 02 Python
Django中间件实现拦截器的方法
Jun 01 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
python 处理string到hex脚本的方法
Oct 26 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
PyTorch笔记之scatter()函数的使用
Feb 12 Python
Django接收照片储存文件的实例代码
Mar 07 Python
python中format函数如何使用
Jun 22 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
php目录管理函数小结
2008/09/10 PHP
php通过session防url攻击方法
2014/12/10 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
Python科学计算环境推荐——Anaconda
2014/06/30 Python
python中二维阵列的变换实例
2014/10/09 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python实现批量压缩图片
2018/01/25 Python
python简单实现操作Mysql数据库
2018/01/29 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
django使用channels实现通信的示例
2020/10/19 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
校园奶茶店创业计划书
2014/01/23 职场文书
道德演讲稿
2014/05/21 职场文书
初中学校对照检查材料
2014/08/19 职场文书
2014年国庆节寄语
2014/09/19 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
Javascript 解构赋值详情
2021/11/17 Javascript