一篇文章助你理解Python2中字符串編碼問題-創(chuàng)新互聯(lián)

前幾天給大家介紹了unicode編碼和utf-8編碼的理論知識,沒來得及上車的小伙伴們可以戳這篇文章:淺談unicode編碼和utf-8編碼的關(guān)系。下面在Python2環(huán)境中進(jìn)行代碼演示,分別Windows和Linux操作系統(tǒng)下進(jìn)行演示,以加深對字符串編碼的理解。

創(chuàng)新互聯(lián)建站為客戶提供專業(yè)的做網(wǎng)站、成都網(wǎng)站建設(shè)、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、移動網(wǎng)站建設(shè)等網(wǎng)站方面業(yè)務(wù)。

一篇文章助你理解Python2中字符串編碼問題


1、首先在Windows操作系統(tǒng)下的Python2環(huán)境中進(jìn)行演示,我們都知道Python2中的編碼問題經(jīng)常出現(xiàn),需要通過編碼(encode)和解碼(decode)進(jìn)行實現(xiàn)。通過cmd進(jìn)入命令行窗口,然后輸入兩個字符串’abc’和u’abc’,如下圖所示。需要注意的是這兩個字符串的編碼格式是不一樣的,前者是string,后者是unicode。接下來對其進(jìn)行編碼,指定編碼為utf-8,可以發(fā)現(xiàn)兩個都正常顯示,沒有報錯。


一篇文章助你理解Python2中字符串編碼問題


當(dāng)字符串變?yōu)橹形牡臅r候,爾后對其再次進(jìn)行編碼演示的時候,如下圖所示,可以看到前者有報錯產(chǎn)生,而后者沒有報錯。這個報錯在Python2中經(jīng)常出現(xiàn),所以需要特別注意,Python字符串在內(nèi)存中它是通過unicode來進(jìn)行編碼的。此時定義的str1它傳遞過來的是utf-8編碼,非unicode編碼,使用encode()函數(shù)的前提是待轉(zhuǎn)換的字符串編碼為unicode編碼。所以可以看到str1會報錯,而str2并沒有報錯。在Windows下字符串的編碼格式是GB2312編碼,在Linux下字符串的編碼格式是utf-8編碼。如果想要將str1順利的轉(zhuǎn)換為utf-8編碼的話,則需要先將str1進(jìn)行解碼成unicode編碼,再進(jìn)行編碼即可,此時得到的結(jié)果同str2轉(zhuǎn)換的結(jié)果是一致的。


一篇文章助你理解Python2中字符串編碼問題


2、現(xiàn)在在Linux操作系統(tǒng)下的Python2環(huán)境中進(jìn)行演示,使用一樣的字符串,結(jié)果最后是一樣的,但是過程有些不同,如下圖所示。


一篇文章助你理解Python2中字符串編碼問題


在Windows下字符串的編碼格式是GB2312編碼,在Linux下字符串的編碼格式是utf-8編碼。所以當(dāng)輸入有中文的字符串的時候,直接編碼為utf-8會報錯;通過gb2312編碼進(jìn)行解碼也會報錯。只要通過utf-8編碼進(jìn)行解碼,然后再通過utf-8進(jìn)行編碼才可以正確的輸出結(jié)果。
有個地方大家可能會覺得很奇怪,就是一開始str1.encode(‘utf-8’),表面上看上去str1已經(jīng)是unicode編碼了,之后進(jìn)行編碼,按說沒有什么問題,可是為什么還是會報錯呢?其實主要原因還是在于str1并不是真正的解碼成了unicode格式。其實str1.encode(‘utf-8’),它默認(rèn)的會進(jìn)行一步解碼,但是其decode()的過程調(diào)用的是默認(rèn)的編碼格式,而這個默認(rèn)的編碼格式卻是ASCII編碼,如下圖所示。


一篇文章助你理解Python2中字符串編碼問題


當(dāng)中文字符串使用ASCII編碼進(jìn)行解碼之后,本身就報錯了,后邊的encode(‘utf-8’)根本就沒有執(zhí)行到。
關(guān)于Python2中字符串編碼的問題,就先介紹到這里了,相信大家應(yīng)該有了一個初步的認(rèn)識了,下一篇文章將介紹Python3中字符串編碼的問題。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前標(biāo)題:一篇文章助你理解Python2中字符串編碼問題-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article36/ijjsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、品牌網(wǎng)站制作、用戶體驗建站公司、微信公眾號網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)