对于单个字符的编码,python提供了两个有意思的函数;
ord()函数将单个字符转换为对应的整数形式,而chr()函数将编码转换为对应的单个字符。
>>>text = ord('你');
>>>text
20320
>>>chr(a)
'你'
由于python的
字符串类型是str,
在内存中以Unicode(
通常是2个字节表示一个字符,一个字节(byte)由8个比特(bit)组成 )表示,如果想要将信息存储到磁盘上就需要先将str变成
以字节为单位的bytes(每个字符都只占一个字节)。
python中对bytes类型的数据用带b前缀的单引号或双引号来表示:
x = b'ASD'
注意b'ASD'和'ASD'虽然长得很像,但是前者是每个字符只占一个字节的bytes数据,而后者是str数据。
python提供了enonde()和decode()方法进行编码
#encode()是将数据转换为bytes类型
>>>'ASD'.encode( ' ascii ' );
b'ASD'
>>>'ASD'.encode( ' utf-8 ' );
b'ASD'
>>>'中国'.encode( ' utf-8 ' );
b'\xe4\xb8\xad\xe5\x9b\xbd'
含有中文的str不能使用ASCII编码,中文编码的范围因为超出了ASCII编码的范围。
反过来,如果我们从磁盘上读取了字节流,那么就需要将bytes数据转换为str数据
python为我们提供了容错机制,即当读入的bytes数据有一部分是无效的,则可以传入errors = ' ignore '参数,忽略无效数据。
>>>b'\xe4\xb8\xad\xe5\x9b'.decode('utf-8',errors = 'ignore');
'中'
如果字符串太长,你又想偷懒让计算机来计算字符串的长度的话,len()函数就大有用武之地了。
>>>len( 'ASD' )
3
>>>len( '中国' )
2
对于bytes数据来说,len()函数又返回的是什么呢
>>>len('中国'.encode( ' utf-8 ' ));
6
>>>len(b'\xe4\xb8\xad\xe5\x9b\xbd');
6
>>>len( b'ASD')
3
可以看出,
一个str类型的英文字母对应于一个字节的bytes数据,而一个str类型的汉字对应于三个字节的bytes数据。
那么,最后来看看当你想输出多个值的时候,例如‘我买了XX个XX花了XX元’,该如何输出呢?
name = '鸭脖';
>>>price = 20 ;
>>>num = 10 ;
>>>print( '我买了%d个%s花了%d元'%( num , name , price ) );
>>>print( '我买了%s个%s花了%s元'%( num , name , price ) );
我买了10个鸭脖花了20元
我买了10个鸭脖花了20元
可以看到,当多值输入的时候,需要利用%()来将数据完成输出的;当你不知道要输出的变量是整型还是字符型的时候,可以用%s作为占位符,因为
%s可以将所有的数据通通转换为字符串类型进行输出。