字符串编码
1、字符编码的编码原理
核心法则:数据以何种编码方式存放的,就以何种方式取码
PS:unicode--->utf-8--->bytes bytes---->utf-8--->unicode Windows操作系统中默认的是gbk编码方式。
ASCII:一个Bytes代表一个字符 日本把日文编到shift_JIS里,韩国把韩文编到Euc-kr
unicode ,统一用2Bytes代表一个字符,2**16=65535,可代表6万多个字符。
utf-8,对英文符采用1Bytes表示,对中文字符用3Bytes.
内存中使用的编码是unicode,用空间换时间(内存应该尽可能的快)
硬盘中或网络传输用utf-8,网络延迟或磁盘读写延迟要远大于utf-8的转换延迟,而且读写应该尽可能的节省带宽,保证数据传输的稳定性。
内存----------》硬盘
unicode---->encode---->utf-8
utf-8----->decode----->unicode
乱码出现的原因:
1、在存数据时采用不兼容的编码的方式
PS:中文字符用ASCII存取。数据不可恢复。
2、在decode数据时用于encode不同的编码方式decode数据。
2、程序的执行
程序的执行分三步
阶段一:启动python解释器
阶段二:python解释器此时就是一个文本编辑器,负责打开文本文件,并将文件从硬盘中读取到内存中。
阶段三:读取已经加载到内存中的代码。执行过程中可能会开辟新的内存空间。(内存中普遍采用unicode的二进制。)
python2中的两种字符串类型
1、str
在python2中,str就是编码后的结果bytes,str=bytes,所以在python2中,unicode字符的编码结果是str/bytes.
2、unicode
unicode会申请新的内存地址,然后将'林'以unicode的格式存放到新的内存空间中,所以s只能encode,不能decode
s=u'林' print repr(s) #u'u6797' print type(s) #<type 'unicode'> # s.decode('utf-8') #报错,s为unicode,所以只能encode s.encode('utf-8')