一、編碼轉換py2和py3對中文的處理
py2:
1 文件要存為utf-8
2 文件第一行聲明為:#encoding=utf-8
#coding=utf-8
#coding:utf-8
#_*_coding:UTF-8_*_
3 所有的中文前面加u,表示unicode
py3:
1 文件要存為utf-8
2 聲明可以不加,加上也沒問題
3 中文前面不用加u,加了也沒事。
不用utf-8的時候,需要第一行聲明(如:#encoding = gbk)
二、編碼轉換
1、說明py -2
py2:utf-8,文件第一行也聲明為utf-8
str1="我們" 類型:str
str1.decode() 默認是:ascii
str1.decode("utf-8")
str1.decode("utf-8")==u"我們"
str1.decode("utf-8").encode("utf-8")==str1
py2:ansi,文件第一行也聲明為gbk
str1="我們" 類型:str
str1.decode() 默認是:ascii
str1.decode("gbk")==u"我們"
str1.decode("gbk").encode("gbk")== str1
2、utf-8:
#encoding=utf-8
s = "我們"
print(type(s))
print(s.decode("utf-8"))
print(s.decode("utf-8")==u"我們")
print(s.decode("utf-8").encode("utf-8")==s)
非交互模式下運行以上代碼
3、Ansi
#encoding=gbk
s = "我們"
print(type(s))
print(s.decode("gbk"))
print(s.decode("gbk")==u"我們")
print(s.decode("gbk").encode("gbk")==s)
非交互模式下運行以上代碼
4、py -3和py-2轉碼的區別說明
py2:str類型等價於py3的bytes類型
py2:str類型例子: s ="中國"
py2的Unicode類型例子:s =u"中國"
p3:str類型等價於py2的unicode類型
py3 的str類型:s = "中國"
py3 的byte類型: s= "中國".encode("utf-8")
encode:不管是2還是3,只能對unicode對象來用
在py2:將unicode類型的對象,轉換為str類型
在py3:將str類型的對象,轉換為了bytes類型
cmd默認是gbk編碼
py2默認是ascii編碼
計算機內存里是unicode編碼
存儲格式可為gbk(ansi)或utf-8等等
涉及到存儲傳輸的byte
只有在unicode下才能將utf-8與gbk互轉
------------------------------------------------------------
py3時:
a="中國" 和a=u"中國" 是一個意思,都表示str類型unicode存儲類型
c=b"good" 表示str類型bytes存儲類型
py2時:
a="中國" 和a=b"中國" 是一個意思,表示str類型bytes存儲類型
a=u"中國" 表示str類型unicode存儲類型
Python3默認為“utf-8”
>>> import sys
>>> sys.getdefaultencoding()#查看默認編碼方式 'utf-8' >>> "我們".encode() b'\xe6\x88\x91\xe4\xbb\xac' >>> "我們".encode().decode() '我們'
>>> "我們".encode("utf-8").decode("utf-8") '我們'