Python学习笔记之【字符串和编码】

字符编码

最早的ASCII,只有127个字母被编到计算机中。中国制定了GB2312编码,用来把中文编进去。其它语言也出现了各自的编码。

为了统一编码,产生了Unicode,它把所有语言都统一到一套编码里,解决了乱码问题,Unicode编码通常是2个字节。

为了节约,出现了“可变长编码”的UTF-8编码,它把Unicode字符编码成1-6个字节,英文字母编码成1个字节,汉字通常是3个。

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

字符ASCIIUnicodeUTF-8
A0100000100000000 0100000101000001
01001110 0010110111100100 10111000 10101101

Python的字符串

Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换;

>>> ord('A')
65
>>> chr(65)
'A'

字符串对Unicode的支持用u'...'表示;

>>> print u'中文'
中文
>>> u'中'
u'\u4e2d'

两种类型如何转换?u'...'和u'\u+Unicode编码'两种表达是一样的。‘...'是ASCII编码,也可以看作Unicode编码,但u'...'只能看作Unicode编码。另外,可以使用encode将Unicode编码转换为UTF-8编码,使用decode反之。使用len()函数可以返回字符串长度。另外,非列表中的数据在输出时是会转换成中文显示出来的,但列表中的unicode数据不会。

      decode                 encode
str ---------> str(Unicode) ---------> str
>>> print u'中'
中
>>> print u'\u4e2d'
中

#Unicode转UTF-8
>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'

#UTF-8转Unicode
>>> 'abc'.decode('utf-8')
u'abc'
>>> '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
u'\u4e2d\u6587'
>>> print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
中文

>>> len(u'ABC')
3
>>> len('ABC')
3
>>> len(u'中文')
2
>>> len('\xe4\xb8\xad\xe6\x96\x87')
6

保存Python源代码时,需要指明编码类型,下方第一行是Linux/OS X下标明是可执行程序,第二行标明保存为UTF-8编码。另外,在编辑器中需要选择以“UTF-8 without BOM”编码。

#!/usr/bin/env python
#coding:utf-8 或 # -*- coding: utf-8 -*-

格式化

Python中采用的格式化方式和C语言一样,用%实现。常见的占位符有%d、%f、%s和%x(十六进制整数)。

>>> print 'a=%05d,b=%.2f' %(128,0.256)
a=00128,b=0.26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值