半边天的云  

字符串编码

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') 

 

posted on 2017-07-27 20:04  半边天的云  阅读(191)  评论(0编辑  收藏  举报