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中列表和元组的相关语句和方法讲解
Aug 20 Python
python3中set(集合)的语法总结分享
Mar 24 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
浅析python继承与多重继承
Sep 13 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
Python与C/C++的相互调用案例
Mar 04 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 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使浏览器直接下载pdf文件的方法
2013/11/15 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
JavaScript延迟加载
2021/03/09 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
跟老齐学Python之一个免费的实验室
2014/09/14 Python
python匿名函数用法实例分析
2019/08/03 Python
基于Python解密仿射密码
2019/10/21 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
请说出以下代码输出什么
2013/08/30 面试题
酒店中秋节促销方案
2014/01/30 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
推广活动策划方案
2014/08/23 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
地陪导游欢迎词
2015/01/26 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server