Python学习之编码、解码

1.Unicode编码包括(utf-8,utf-16,utf-32):

    中文编码:GB2312,GBK,GB18030,BIG5

    英文编码:ASCII

basestring下面有两个对象,unicode,str 那这两者的关系是怎么样的?
  unicode   ==>  str                  encode(编码)   
        str           ==>   unicode       decode(解码)

2.python2的源码.py文件的默认编码方式为ASCII,

   python3的源码.py文件的默认编码方式为UTF-8。

  对于python2.7  utf-8解码成unicode

                           utf-8编码成gbk

  对于python3.5  utf-8编码成gbk  (python3中只有编码encode()方法)

具体说明:

python3中encode和decode的一些基本用法
python3中encode和decode跟python2还是有一定的区别的,在python3中: 
  encode(编码):按照某种规则将“文本”转换为“字节流”。  python 3中表示:unicode变成str
    decode(解码):将“字节流”按照某种规则转换成“文本”。   python3中表示:str变成unicode
字符串在Python内部的表示是Unicode编码,因此在做编码转换时,通常需要以Unicode作为中间编码,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(encode)成另一种编码。
  u代表Unicode类型,s代表str类型
  u.encode('...'):只要你填写了正确的编码,基本上总是能成功的。就像任何文件都可以压缩成zip文件。
  u.decode('...'):没有任何意义,因为decode是将str转为unicode编码,而u本身就是unicode编码的。
  s.encode('...'):在python 3中,将产生一个编码后的byte类型字符串(这里有点像Python 2.x中的str),byte类型的字符串是支持解码操作的。
  s.decode('...'):运行都会出错。因为python 3中的str类型对象有点像Python 2中的unicode, 而decode是将str转为unicode编码,所以str仅有一个encode方法,调用这个方法后将产生一个编码后的byte类型的字符

3.python3中字节和字符串的转换:

  字符串转换成字节bytes(s,encoding='utf-8')
  字节转换成字符串str(b,encoding='utf-8')
  utf-8编码一个汉字3个字节,按gbk编码一个汉字2个字节
python3.x中bytes()可以将字符转换成字节,字符其实是用十六进制表示的二进制的字符串
python2.x和python3.x中for循环和len()的区别:
     3.5中for循环的是字符,2.7中循环的是字节
     3.5中len()计算长度也是按照字符来计算,2.7中按照字节来计算
s = "徐铭"
for i in s:
    # 输出字符
    print(i)
    #输出字节
    print(bytes(i, encoding='utf-8'))
    bytes_list = bytes(i, encoding='utf-8')
    #for循环访问字节列表,输出10进制数
    for b in bytes_list:
        print(b)
        #bin()方法接收一个10进制数,并且将其转换成二进制
        print(b, bin(b))

 

posted @ 2017-10-15 14:16  SimonXu666  阅读(933)  评论(0编辑  收藏  举报