Python中的字符串操作和编码Unicode详解
作者:jessonsh 发布时间:2021-02-24 18:37:11
本文主要给大家介绍了关于 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()
来源:http://www.cnblogs.com/jessonluo/p/4744833.html


猜你喜欢
- 本文实例为大家分享了python实现12306图片验证效果的具体代码,供大家参考,具体内容如下思路:在鼠标点击位置加一个按钮,然后再按钮中的
- UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是
- <html> <head> <style type="text/css"> * {
- PyQtGraph是纯Python的,只是它底层调用的是PyQt,也就是Qt的Python封装,底层用C/C++语言开发的库,它是在PyQt
- 影响的范围: IE的所有版本在表单的radio/checkbox控件中,一旦他们的DOM结构被更改过就会出现这个bug。bug描述当象下例中
- 环境 django 1.10.6缘起今天接到一个任务——解决终端满屏日志中的无用错误。 django 会尽可能给你准确报出错误位置,但是一些
- 起因:有一批数据需要每个月进行分析,数据存储在excel中,行标题一致,需要横向合并进行分析。数据示意:具有多个代码:# -*- codin
- 下载并选择MySQL的安装包由于MySQL一直在升级,所以当您阅读本文时,或许在其官方网站上已提供了新的正式版供你下载,因此,以下提供的链接
- 一、Mysql锁是什么?锁有哪些类别?锁定义: 同一时间同一资源只能被一个线程访问  
- vue-amap是对高德地图JS API进行封装的、适用于vue项目的地图组件库。在笔者开发的很多项目中都有用到,相比直接使用高德地图JS
- 安装报错类型,解决方案;1. 数据库连接报错mysqldb只支持python2,pymysql支持3,都是使用c写的驱动,性能更好# dja
- 1. 安装Pyechartspip install pyecharts2. 图表基础2.1 主题风格添加主题风格使用的是 InitOpts(
- 我们需要开始思考如何将文本集合转化为可量化的东西。最简单的方法是考虑词频。我将尽量尝试不使用NLTK和Scikits-Learn包。我们首先
- 效果图:代码如下:<!DOCTYPE html><html> <head> <meta chars
- 发现报错对于Navicat连接数据库mysql 出现报错2003(10060),如下所示报错经过查询总结以上出现问题的主要解决方法三种:1、
- MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。语法以下为删除MySQL数
- 我们公司网站的项目都是采用utf-8编码格式的,一天,发现部分电脑打开网站的一个页面是空白页,要在IE下重新选择编码才显示正常。我们网站的编
- 简介字符串序列用于表示和存储文本,python中字符串是不可变的,一旦声明,不能改变通常由单引号(' ),双引号(" ),
- 下面介绍下Python import与from import使用,具体内容如下所示:Python程序可以调用一组基本的函数(即内建函数),比
- 面包屑导航可以将浏览过的页面记录下来,方便很快速的跳转回某一个页面,本文介绍了几种自己封装面包屑组件的方式。一、为什么需要面包屑?当网页进行