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 开发Activex组件方法
Nov 08 Python
Python set集合类型操作总结
Nov 07 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
python多个模块py文件的数据共享实例
Jan 11 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
python跨文件使用全局变量的实现
Nov 17 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网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
php将html转为图片的实现方法
2017/05/19 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
python机器学习之贝叶斯分类
2018/03/26 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python实现代码审查自动回复消息
2021/02/01 Python
python实现银行账户系统
2021/02/22 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
Java中实现多态的机制是什么?
2014/12/07 面试题
优秀求职信范文分享
2014/01/26 职场文书
小学英语教学反思
2014/01/30 职场文书
给学校的建议书
2014/03/12 职场文书
村委会贫困证明范本
2014/09/17 职场文书
停课通知书
2015/04/24 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis