【python3自学笔记3】—字符串和编码

来源:互联网 发布:plm软件占有率 编辑:程序博客网 时间:2024/06/02 06:29

时间:2016.10.19

摘录自:廖雪峰python3.5教程

内容:字符串和编码

目录:

一、字符编码的发展

二、Python的字符串


正文:

一、字符编码的发展

美国人在发明计算机编码时只将大小写英文字母、数字和一些符号共127个字母编码到计算机中,称为ASCAII编码。最早的计算机以8个比特为一个字节,所以一个字节能表示最大的整数是255。显然,在处理汉字的时候一个字节是远远不够的。为了对汉字进行编码,并且汉字编码还不与ACSII码重复,中国制定了GB2312编码。不单是中国,世界上其他国家都制定了自己的编码标准,就不可避免的出现重复,导致在多语言混合的文本中出现乱码。为了解决这个问题国际组织制定了Unicode把所有的语言都统一到一套编码中,俗称统一码、万国码。

ASCAII码和Unicode码之间的区别是:ASCII码只占一个字节,Unicode通常为两个字节,生僻字可能需要4个字节。在ASCAII码字符前补0就能够转换为同样字符含义的Unicode码。

如果都使用英文进行编码时,Unicode编码比ASCII编码多一倍的存储空间,所以出现了将Unicode编码转换为可变长编码的UTF-8编码。UTF-8将字符编码为1-6个字节,常用的英文字母被编码成1个字节,汉字通常为3个字节,很生僻的字符被编码为4-6个字节,所以对于纯英文字符文本,UTF-8编码节省了大量的空间。

ASCII编码实际上成为了UTF-8编码的一部分,因此,大量只支持ASCII编码的软件可以在UTF-8编码下继续工作。

计算机系统通用的字符编码工作方式:在计算机内存中统一使用Unicode编码,当需要保持到硬盘或者需要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存中,编辑完成保存的时候再把Unicode转换为UTF-8保存到文件。


二、Python的字符串

在Python3中,字符串以Unicode编码,也就是说Python的字符串支持多语言。

ord()函数获取单个字符的整数表示,ord(‘A’)回车 65

chr()函数将整数转换为对应的字符,chr(‘66’) 回车 ‘B’

若知道某个字符的16进制整数,可以通过'\uXXXX'表示该字符。例如'\u0041' 回车 ‘A’

Python中str为Unicode编码,如需在网络上传输或者保存到磁盘上,就需要把str转换成以字节为单位的bytes。

bytes类型的数据用b前缀的单引号或者双引号表示,若x = b‘ABC’

以Unicode表示的str可以通过encode()转换为其他编码,‘ABC’.encode(‘ascii’)回车 b‘ABC’

要从网络或者磁盘上读取字节流就需要将bytes通过decode()转变成str,b‘ABC’.decode(‘ascii’)回车 ‘ABC’

计算字符串含有多少字符,len(‘ABC’)回车 3;len(‘中文’)回车 2

在操作字符串时,为了避免乱码,应当始终坚持使用UTF-8编码对str和bytes进行转换。

在保存源代码是 ,需要指定保存为UTF-8编码。注:确保文本编辑器正在使用UTF-8 withoutBOM编码。除此之外,当Python解释器读取源代码时,为了让它按UTF-8编码,通常在文件开头写上一下两行:

#!/usr/bin/env python 3

# -*- coding: utf-8 -*-

第一行注释为了告诉Linux/OS X系统,这是一个Python程序,Windows系统会忽略这个注释。

第二行注释为了告诉Python解释器,按照UTF-8编码读取源代码。

格式化字符串:字符串中间的一部分内容根据变量变化。使用方法:用占位符%X作为变量加入到字符串中,在字符串后面用%(变量)。常见的占位符有%d整数%f浮点数%s字符串%x十六进制整数

>>>'hello,%s'%chen!"

格式化整数和浮点数还可以指定显示位数、是否补0和整数和小数的位数。

如果你不太确定变量的类型,可以用%s表示,它会把任何类型的数据转换为字符串。

当%只是一个普通的百分号是需要用%%表示。





0 0
原创粉丝点击