在python2中用的是ASCII編碼,所以在進行打印中文的時候要進行編碼和解碼。
在python3中用的是Unicode編碼,Unicode號稱萬國碼,可以向所有的編碼進行兼容。所以在Python3中不會出現中文打印不了的情況,除非是文件本身編碼出了問題。
---------------------------------------------------------------------------------------
Python2
s = "hello world"
print(s)
是可以直接進行打印的。
s = "中文"
print(s)
Python2會進行報出語法錯誤,總共有兩個問題:
1.沒有對代碼的編碼進行注解:
在文件的頭部加入
#-*- coding:utf-8 -*-或者 #coding:utf-8
2.對文件進行編碼解碼:
Python編碼之間Unicode作為中間的過度。所以編碼能夠進行通用:
#-*- coding:utf-8 -*-
s = "中文"
print(s.decode("utf-8").encode("gbk"))
編碼解碼整個過程,就好像是Unicode是一個翻譯官一樣:例如jbk和gbk之間的一個過程:
jbk無法直接轉換到gbk,所以需要有一個過程, jbk decode生成Unicode utf-8然后在進行encode生成gbk
----------------------------------------------------------------------------------------------------------
Python3
#encode 在編碼的同時,會把數據轉換成byte類型
import sys
print(sys.getfilesystemencoding())
s = "中文" #py3 默認就是utf8 unicode向下兼容utf-8
s_to_gpk = s.encode("gbk")
print(s_to_gpk.decode("gbk")) #py3是不需要轉換的,但是要轉的話還要轉回去
----------------------------------------------------------------------------------------------------------
補充:
'''
-----二進制:(0 and 1)
-------->>ASCII :只能存放英文河拉丁字符。一個字符占一個字節,8位
--------------->>gb2312:只能6700多個中文,1980年
--------------------->>gpk1.0:存了2萬多個字符,1995
--------------------------->>gb18030:2000,27000中文(在中國軟件發布的時候必須用gb18030)
---------->>unicode: utf-32:一個字符占四個字節
---------->>unicode: utf-16>一個字符占兩個字節或兩個以上,65535(實在找不到的時候在utf-32里面找)
---------->>unicode: utf-8:一個英文用ASCII碼來存,一個中文占3個字節,utf=8表示是根據表示什么來決定大小的。
---------->>GBK GB2312 表示中文得時候用得是兩個字節。
'''