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的SQLAlchemy框架使用入门
Apr 29 Python
Python3 模块、包调用&路径详解
Oct 25 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
Python之列表的插入&替换修改方法
Jun 28 Python
python tornado修改log输出方式
Nov 18 Python
解决Python二维数组赋值问题
Nov 28 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
python中如何写类
Jun 29 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
Python使用openpyxl复制整张sheet
Mar 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 中文处理技巧
2010/04/25 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
django中的ajax组件教程详解
2018/10/18 PHP
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
python语言基本语句用法总结
2019/06/11 Python
Python threading的使用方法解析
2019/08/28 Python
Python2与Python3的区别详解
2020/02/09 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
初级党校心得体会
2014/09/11 职场文书
银行员工考核评语
2014/12/31 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS