首先,介紹一下編碼類型:
然后,再看一下編碼類型的轉換過程:
python程序是在內存中運行,因此應該處理的是Unicode類型的字符串,文件或終端中的各種編碼方式,可以理解為py3中的Bytes類型。
Unicode只能在內存中使用
Bytes是在文件存儲和網絡數據傳輸中使用
記住我們的程序要處理的是Unicode類型
下面看一下py2和py3中字符串的類型:
py2:
py3:
看起來好像一樣,都是str類型,其實對應的編碼方式是不一樣的,請看下圖:
這樣是否看出區別了呢?在py3中,str就是Unicode類型,所以py3中不會有中文編碼的各種問題,聲明一個str類型的中文字符串,程序即可直接進行處理;但是在py2中呢,str是對應的gbk、utf-8等類型,相當于編碼后的Unicode,程序要處理的是Unicode類型,而你的中文字符串是gbk類型(隨便選一個舉例),這樣程序自然就報錯了。
py3:
s = “abc” #等價于py2的unicode類型,例如s=u"中國"
type(s) —str類型—>> unicode
s1=b"abc" —bytes類型—(gbk,utf-8…)
s.encode(“utf-8”)—>bytes類型
s.encode(“utf-8”).decode(“utf-8”)—>unicode類型
py2:
s = “中國” #等價于 py3的bytes類型
type(s) —str類型—>不是unicode,而是類似py3里面的bytes對象
s.decode(“utf-8”)—>unicode
s.decode(“utf-8”).encode(“utf-8”)類型—>str類型
這樣看是否就很清晰了呢?也就是說你在py3中聲明一個str類型變量,這個變量支持的操作是編碼操作,即s.encode(“utf-8”);
而你在py2中聲明一個str類型變量,這個變量支持的操作是解碼操作,即s.decode(“utf-8”)
那么,有中文的情況下應該怎么使用才不會報錯呢?
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,加了也沒事
常用終端的編碼類型:
CMD是gbk編碼
記事本默認ANSI編碼(gbk)
注:
1.讀文件 讀到的都是Unicode
2.編碼和解碼要用相同的字符集(用什么編碼就用什么解碼)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
