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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
python实现PCA降维的示例详解
Feb 24 Python
python requests.get带header
May 05 Python
python怎么删除缓存文件
Jul 19 Python
python定时截屏实现
Nov 02 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
js 匿名调用实现代码
2009/06/19 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
django如何通过类视图使用装饰器
2019/07/24 Python
python实现简单井字棋游戏
2020/03/04 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
工作决心书
2014/03/11 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
医院节能减排方案
2014/06/13 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
公司离职证明标准范本
2014/10/05 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
餐馆开业致辞
2015/08/01 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL