首页 > 学院 > 开发设计 > 正文

Python的字符串操作和Unicode

2019-11-14 17:03:50
字体:
来源:转载
供稿:网友

字符串类型

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~0x3FFFFFF5字节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.isdecimals.isdigit()s.isnumeric()s.isPRintable()s.isspace()s.isidentifier()                #如果字符串可以用作变量名,那么返回Trues.islower()s.isupper()s.istitle()

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表