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使用psutil模块获取系统状态
Aug 27 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
pandas中Timestamp类用法详解
Dec 11 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python 字符串只保留汉字的方法
Nov 16 Python
python如何删除文件中重复的字段
Jul 16 Python
appium+python adb常用命令分享
Mar 06 Python
Django之全局使用request.user.username的实例详解
May 14 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
python爬虫scrapy图书分类实例讲解
Nov 23 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 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多用户计数器代码
2007/03/11 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
跟老齐学Python之用Python计算
2014/09/12 Python
如何利用python查找电脑文件
2018/04/27 Python
python的sorted用法详解
2019/06/25 Python
在Python中COM口的调用方法
2019/07/03 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
奥林匹克运动会口号
2014/06/19 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
pandas数值排序的实现实例
2021/07/25 Python