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解析xml模块封装代码
Feb 07 Python
python编写暴力破解FTP密码小工具
Nov 19 Python
Python实现网站文件的全备份和差异备份
Nov 30 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
python装饰器实例大详解
Oct 25 Python
python监控键盘输入实例代码
Feb 09 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
python 进程池pool使用详解
Oct 15 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
PL-880隐藏功能
2021/03/01 无线电
php在线生成ico文件的代码
2007/10/09 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
PHP Cookie学习笔记
2016/08/23 PHP
JS查看对象功能代码
2008/04/25 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
node.js中watch机制详解
2014/11/17 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
详解Vue.js分发之作用域槽
2017/06/13 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Python随机读取文件实现实例
2017/05/25 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
django使用html模板减少代码代码解析
2017/12/12 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
2015年网络管理员工作总结
2015/05/21 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技