跳至主要內容

字符串及编码

yczha大约 3 分钟python基础python语法python

Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程open in new window

字符编码

计算机只能处理数字,其内部的电路处理的只有0、1数字,因而要处理类似字符串之类的内容就需要使用编码,即:建立一种数字到字符的映射关系,比如拿ASCII举例:A这个字符在计算机内被表示为整数65,而65转换为二进制为01000001,这里,还涉及到一个字节的概念,观察发现65的二进制表示,其有8个数字,这里我们称之为:8个比特(bit)代表一个字节(byte),8个比特代表一个字节是由早期的计算机设计时决定的,而A表示为一个字节这是由ASCII码编码规则确定的,其编码规则就是使用一个字节代码一个英文字母或者符号,所以ASCII码只能表示英文及几个符号,并且由于一个字节8位最小为000000002=010 最大为111111112=25510 ,因而其所能表示的字符总数不超过256个,鉴于此,国内制定了GB3212 标准用来编码汉字,而其他的国家也制定了相应的规范,比如日本的Shift_JIS,韩国的Euc-kr 等,但是这样造成的局面就是每个国家的规范都不统一,极不利于发展,鉴于此,出现了统一世界各国的标准:Unicode 编码!Unicode 编码统一了世界各国的编码,但是因为其涵盖的字符很多,所以需要使用更长的字节才能表示,比如一个字节最多表示256个字符,而2个字节最多表示216=65536,3个字节最多表示224=16777216 等。Unicode 基本使用两个字节来进行编码,当表示英文字母这样用一个字节即可表示的字符时造成了储存空间上的浪费,鉴于此,出现了一种可变长的编码:UTF-8编码,UTF-8 编码会根据字符的不同将其编码为1至6个不同长度字节

Python中的编解码

Python3默认字符串以Unicode编码,因而Python中可混合多语言使用:

print("hello,混合使用")

对于单个字符的编码,Python提供了ord() 函数来获取其整数表示,反之,使用chr() 函数获得其编码结果:

>>> ord("中")
20013
>>> chr(20013)
'中'

数据在网络上传输使用的是字节流,Python提供byte 类型的转换,其表示为:b'str' ,比如我们给出一个字节流:

x=b'ABC'

Python中Unicode编码的字符串可以使用encode 方法转换为字节流:

>>> 'ABC'.encode('utf-8')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

注:无法用ASCII编码的字节会显示为\x

以下通过实例展示字符编码占用的字节数:

>>> len(b'ABC')
3
>>> len('中文'.encode('utf-8'))
6

可见,在utf-8编码中,每个英文字母占一个字节,而一个中文占了3个字节。

格式化输出

Python中提供%+内容的形式来提供格式化输出

占位符替换内容
%d整数
%f浮点数
%s字符串
%x十六进制整数

示例:输出三位同学的姓名,成绩。

  >>>student={'yooongchun':100,'Tim':99,'Tom':98}
  >>>for name,score in student.items():
  ...    print("你好,%s,你的数学成绩为:%d"%(name,score))
  ...
  你好,yooongchun,你的数学成绩为:100
  你好,Tim,你的数学成绩为:99
  你好,Tom,你的数学成绩为:98