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中使用异步Socket编程性能测试
Jun 25 Python
详解python3实现的web端json通信协议
Dec 29 Python
Python AES加密模块用法分析
May 22 Python
Python引用传值概念与用法实例小结
Oct 07 Python
Python设计模式之中介模式简单示例
Jan 09 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
python如何建立全零数组
Jul 19 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
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
一步一步学习PHP(3) php 函数
2010/02/15 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
Yii2如何批量添加数据
2016/05/17 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
Python使用Supervisor来管理进程的方法
2015/05/28 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
python挖矿算力测试程序详解
2019/07/03 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
2014幼儿园保育员工作总结
2014/11/10 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
教师节主题班会教案
2015/08/17 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
Mysql 文件配置解析介绍
2022/05/06 MySQL