点击上方蓝字关注我们不迷路!
字符串与编码
一、了解计算机编码
1.1 编码
定义:将信息从一种形式转换为另外一种形式的过程叫做编码,即信息转换过程
举例:信息加密解密、语言翻译
1.2 计算机编码
定义:将计算机可读信息转换为人类可读形式的过程叫做计算机编码。
注:计算机只能读取二进制数据0/1,又称机器码。
举例:将机器码转换为人类可读信息,如:图像、文字、音频、视频等。
二、常见编码
2.1 ASCII码
中文名:美国信息交换标准码
英文名:American Standard Code for Information Interchange
基本简介:ASCII码是最早的计算机编码,主要用于表示英文字符、数字和一些标点符号
下面是ASCII表:
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 |
0 | NUT | 32 | (space) | 64 | @ | 96 |
1 | SOH | 33 | ! | 65 | A | 97 |
2 | STX | 34 | " | 66 | B | 98 |
3 | ETX | 35 | # | 67 | C | 99 |
4 | EOT | 36 | $ | 68 | D | 100 |
5 | ENQ | 37 | % | 69 | E | 101 |
6 | ACK | 38 | & | 70 | F | 102 |
7 | BEL | 39 | , | 71 | G | 103 |
8 | BS | 40 | ( | 72 | H | 104 |
9 | HT | 41 | ) | 73 | I | 105 |
10 | LF | 42 | * | 74 | J | 106 |
11 | VT | 43 | + | 75 | K | 107 |
12 | FF | 44 | , | 76 | L | 108 |
13 | CR | 45 | - | 77 | M | 109 |
14 | SO | 46 | . | 78 | N | 110 |
15 | SI | 47 | / | 79 | O | 111 |
16 | DLE | 48 | 0 | 80 | P | 112 |
17 | DCI | 49 | 1 | 81 | Q | 113 |
18 | DC2 | 50 | 2 | 82 | R | 114 |
19 | DC3 | 51 | 3 | 83 | S | 115 |
20 | DC4 | 52 | 4 | 84 | T | 116 |
21 | NAK | 53 | 5 | 85 | U | 117 |
22 | SYN | 54 | 6 | 86 | V | 118 |
23 | TB | 55 | 7 | 87 | W | 119 |
24 | CAN | 56 | 8 | 88 | X | 120 |
25 | EM | 57 | 9 | 89 | Y | 121 |
26 | SUB | 58 | : | 90 | Z | 122 |
27 | ESC | 59 | ; | 91 | [ | 123 |
28 | FS | 60 | < | 92 | / | 124 |
29 | GS | 61 | = | 93 | ] | 125 |
30 | RS | 62 | > | 94 | ^ | 126 |
31 | US | 63 | ? | 95 | _ | 127 |
2.2 GB2312
中文名:信息交换用汉字编码字符集
简介:由中国国家标准总局发布的GB2312专用于表示中文信息,GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。
2.3 Unicode码
英文名:Unicode
中文名:统一码
别名:万国码、单一码
简介:Unicode码为每种语言中的每个字符设定了统一且唯一的二进制编码,统一了不同国家的编码,表示不同国家的文字;UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
例如:“汉字”对应的数字是0x6c49和0x5b57
2.4 UTF8
中文名:utf8_encode
简介:Unicode码实际上是一个字符集,它只规定了二进制与各个字符之间的对应关系,并没有规定如何在磁盘上存储。字节是计算机存储的最小单位,具体换算如下:
# 1024字节 为 1 K# 1024 K 为 1 M# 1024 M 为 1 G
UTF32是Unicode 码 的一种实现,一般用4个字节表示一个字符,而一个英文字符只需要1个字节,一个常用汉字需要2个字节,这样比较浪费存储空间。故为了节省存储空间,UTF8 一般用1 到4 个字节表示一个字符,比如:英文字符用1 个字节,常用汉字用2 个字节。
注意:UTF8 是Unicode 码的一种常用实现方式,UTF8使用变长字节来表示字符,即使用的字节数是可变的。
三、python源文件编码
3.1 python2.x
在python2.x中,python源文件默认使用ASCII码格式编码,因此默认情况下是不支持中文的。如果强制输出中文编译会报错,这时如果想在python2.x源文件代码中输入中文符,需要使用UTF-8编码,在源文件开头处添加:
#-*- coding: UTF-8 -*-
或者
#coding: utf-8
3.2 python3.x
在python3.x中,python源代码文件默认统一使用Unicode编码,默认以UTF-8格式编码,就可以直接输出中文字符,不需要在源文件开头添加上述代码。
四、python3字符串与编码
4.1 str 类型
Python3中的字符串类型str'>统一采用Unicode编码,因此可以使用各种字符,示例代码如下:
>>>print(' 覃原 ') #中文覃原>>>print(' qinyuan ') #英文qinyuan
4.2 bytes类型
当str类型需要磁盘存储或网络传输时,需要将其转换为bytes类型。同时需要注意bytes是一个二进制类型,需要在str之前加上一个b,示例程序如下:
>>>type(b'qinyuan') # 注意这里type()函数的作用是判断数据类型<class 'bytes'>
注意:bytes中只能包含ASCII字符,若包含其他字符就会报错,如下:
>>>name = b' 覃原 'SyntaxError: bytes can only contain ASCII literal characters.
4.3 str转为bytes
str类型转换为bytes类型,需要使用str中的encode方法,参数utf8是编码格式,示例代码如下:
>>>name = ' 覃原 '>>>name.encode(' utf8 ')b'\xe8\xa6\x83\xe5\x8e\x9f'
4.4 bytes转为str
bytes类型转换为str类型,需要使用bytes中的decode方法,参数utf8是编码格式,示例代码如下:
>>>utf = b'\xe8\xa6\x83\xe5\x8e\x9f'>>>utf.decode(' utf8 ')' 覃原 '
注意:str与bytes类型转换时使用utf8编码
4.5 str与Unicode互转
将str转为Unicode,其中参数unicode-escape是编码格式,示例代码如下:
>>>'覃原'.encode('unicode-escape')b'\\u8983\\u539f'
将Unicode转为str,示例代码如下:
>>>b'\\u8983\\u539f'.decode('unicode-escape')'覃原'
五、字符串格式化
5.1 %运算符——格式化输出
格式符号 | 转换 |
%s | 字符串 |
%d | 有符号的十进制整数 |
%f | 浮点数 |
%c | 字符 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写ox) |
%X | 十六进制整数(大写OX) |
%e | 科学计数法(小写’e’) |
%E | 科学计数法(大写’E’) |
%g | %f和%e的简写 |
%G | %f和%E的简写 |
示例程序:
>>>age = 21>>>name = ' 覃原 '>>>weight= 60.50>>>student_id=1>>>print(' 我的名字是%s ' % name)>>>print(' 我的学号是%04d ' % student_id)>>>print(' 我的年龄是%d ' % age)>>>print(' 我的体重是%.2f公斤' % weight)>>>print(' 我的学号是%04d,名字%s,年龄%d,体重%.2f' % (student_id,name,age,weight))我的学号是0001,名字覃原,年龄21,体重60.50
注意:(1) %04d,表示输出的整数显示位数,不足以0补全,超出当前位数则原样输出。
(2)%.2f,表示小数点后显示的小数位数。
(3)可以采用%s输出所有类型的数据,%s会将所有数据转换为字符串
(4)%%可以输出为%,不转义%
5.2 format( )函数
format()用于字符串格式化,功能非常强大,格式是str.format(),format函数可以接受不限个参数,位置可以不按顺序,示例代码如下:
>>>print(' 我的学号是{0:04d},名字{1},年龄{2},体重{3:.2f}'.format (student_id,name,age,weight))我的学号是0001,名字覃原,年龄21,体重60.50
5.3 f-格式化字符串
f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它不仅更易读,更简洁,不易出错,而且速度更快,其格式为:f '{表达式}',示例代码如下:
>>>print(f '我的学号是{student_id:04d},名字{name},年龄{age},体重{weight:.2f}')我的学号是0001,名字覃原,年龄21,体重60.50
函数扩展
1.ord( ): 获取一个字符的十进制,示例程序:
>>>ord('覃')35203
2.chr( ): 将十进制数字转为字符,示例程序:
>>>chr(35203)覃
3.str( ): 将非字符串值转换为字符串,示例程序:
>>>age = 21 #这里age为int型21>>>str(age) #即转换为字符串'21'
4.len( ): 计算str的字符数,如果换成bytes,就是计算字节数,示例程序:
>>>len('QIN')3>>>len('覃原')2>>>len(b'\xe8\xa6\x83\xe5\x8e\x9f')6>>>len('覃原'.encode('utf-8'))6
5.type( ): 判断数据类型,示例程序:
>>> type('覃原')
↓↓↓
练习
小覃的成绩从去年的80分提升到了今年的90分,请计算小明成绩提升的百分点,并分别使用三种字符串格式化方法显示出 ' xx.xx% ',保留两位小数即可。
end