python2和python3编码

python2编码

          unicode:unicode 你好 u'u4f60u597d'
          | |                  | |
    encode('utf8')| |decode('utf8')      encode('gbk')| |decode('gbk')
          | |                  | |
          utf8                  gbk
编码后的str 'xe4xbdxa0xe5xa5xbd'     编码后的gbk u'u6d63u72b2u30bd'


# str: bytes

>>> s = '你好 world'
>>> print repr(s)
'xe4xbdxa0xe5xa5xbd world'
>>> print len(s)
12
>>> print type(s)
<type 'str'>

# unicode:unicode 

>>> s = u'你好 world'
>>> print repr(s)
u'u4f60u597d world'
>>> print len(s) 
8
>>> print type(s)
<type 'unicode'>

#unicode: 无论什么字符在Unicode都有一个对应。

python2的特点
1.在python2中print把字节转成了Unicode

2.python2中以默认已ASCII编码
[root@localhost ~]# cat python.py
#coding:utf8 # 告诉解释器以utf8编码
print '你好'

python3编码
在python3中默认以utf8编码

            str:unicode 你好 u'u4f60u597d'
          | |                  | |
    encode('utf8')| |decode('utf8')      encode('gbk')| |decode('gbk')
          | |                  | |
          utf8                  gbk
编码后的str 'xe4xbdxa0xe5xa5xbd'     编码后的gbk u'u6d63u72b2u30bd'

>>> s = '你好 world'
>>> print (json.dumps(s))
"u4f60u597d world"
>>> print (len(s))
8
>>> print (type(s))
<class 'str'>

编码解码方式1:

>>> s = '你好 world' 
>>> b = s.encode('utf8')
>>> print (b)
b'xe4xbdxa0xe5xa5xbd world'
>>> s = b.decode('utf8')
>>> print (s)
你好 world
>>> s = b.decode('gbk')
>>> print (s)
浣犲ソ world

编码解码方式2:

>>> s = '你好 world' 
>>> b = bytes(s,'gbk')
>>> print (b) 
b'xc4xe3xbaxc3 world'
>>> s = str(b,'gbk')
>>> print (s)
你好 world


>>> s = '你好 world' 
>>> b = bytes(s,'utf8') 
>>> print (b)
b'xe4xbdxa0xe5xa5xbd world'
>>> s = str(b,'utf8')
>>> print (s)
你好 world
>>> s = str(b,'gbk') 
>>> print (s)
浣犲ソ world
原文地址:https://www.cnblogs.com/gaoyuanzhi/p/8306868.html