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 (2)
Oct 31 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
Python入门必须知道的11个知识点
Mar 21 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
python实现网页自动签到功能
Jan 21 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
如何基于python操作json文件获取内容
Dec 24 Python
tensorflow之并行读入数据详解
Feb 05 Python
vscode+PyQt5安装详解步骤
Aug 12 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
SONY SRF-40W电路分析
2021/03/02 无线电
用Flash图形化数据(一)
2006/10/09 PHP
dedecms模版制作使用方法
2007/04/03 PHP
用php解析html的实现代码
2011/08/08 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
javascript date格式化示例
2013/09/25 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
python操作oracle的完整教程分享
2018/01/30 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
应届生法律求职信
2013/10/22 职场文书
工程班组长岗位职责
2013/12/30 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
小学生家长评语大全
2014/02/10 职场文书
网络技术专业推荐信
2014/02/20 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
工作感言一句话
2015/08/01 职场文书