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通过ftplib登录到ftp服务器的方法
May 08 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
Python基于FTP模块实现ftp文件上传操作示例
Apr 23 Python
对Django 转发和重定向的实例详解
Aug 06 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
django框架F&Q 聚合与分组操作示例
Dec 12 Python
Numpy之reshape()使用详解
Dec 26 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 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
星际争霸秘籍
2020/03/04 星际争霸
PHP经典的给图片加水印程序
2006/12/06 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
Python实现读取并保存文件的类
2017/05/11 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
更新修改后的Python模块方法
2019/03/03 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
python enumerate内置函数用法总结
2020/01/07 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
python 串行执行和并行执行实例
2020/04/30 Python
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
奶茶店创业计划书
2014/08/14 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
民事调解协议书
2016/03/21 职场文书
导游词之山海关
2019/12/10 职场文书