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 30 Python
python+mysql实现简单的web程序
Sep 11 Python
跟老齐学Python之用while来循环
Oct 02 Python
Python下Fabric的简单部署方法
Jul 14 Python
python 重命名轴索引的方法
Nov 10 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
Python基于traceback模块获取异常信息
Jul 23 Python
pandas apply多线程实现代码
Aug 17 Python
python dict如何定义
Sep 02 Python
Python的collections模块真的很好用
Mar 01 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设计模式 Adapter(适配器模式)
2011/06/26 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
微信小程序实现工作时间段选择
2019/02/15 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
pycharm显示远程图片的实现
2019/11/04 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
党员批评与自我批评范文
2014/09/23 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
活动新闻稿范文
2015/07/17 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers