亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python2與Python3關(guān)于字符串編碼處理的差別總結(jié)

 更新時(shí)間:2020年09月07日 09:47:09   作者:9ian1i  
這篇文章主要給大家介紹了Python2與Python3關(guān)于字符串編碼處理差別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

0x00 字符的編碼

計(jì)算機(jī)畢竟是西方國(guó)家的發(fā)明,最開(kāi)始并沒(méi)有想到會(huì)普及到全世界,只用一個(gè)字節(jié)中的7位(ASCII)來(lái)表示字符對(duì)于現(xiàn)在龐大的文字?jǐn)?shù)量來(lái)說(shuō)顯然不夠,所以先后經(jīng)歷了好幾套編碼方案,不同國(guó)家和地區(qū)又有自己的方案,造成了現(xiàn)在諸多的歷史遺留問(wèn)題。

0x01 Python中的字符串

Python有兩種不同的字符串,一種存儲(chǔ)文本,一種存儲(chǔ)字節(jié)。對(duì)于文本,Python內(nèi)部采用Unicode存儲(chǔ),而字節(jié)字符串顯示原始字節(jié)序列或者ASCII。

什么叫編碼(encode)?

按照字面意思和以往經(jīng)驗(yàn),我要把這個(gè)文本或字符串用“UTF-8”編碼,感覺(jué)上應(yīng)該是對(duì)字節(jié)數(shù)據(jù)進(jìn)行編碼然后顯示正確的文字。大多數(shù)人都是這么想的,可事實(shí)呢?

編碼的意思是將Unicode字符按照編碼規(guī)則(如UTF-8)編成字節(jié)序列:

這里寫(xiě)圖片描述

有人此時(shí)會(huì)問(wèn),我用 print 語(yǔ)句打印出來(lái)怎么是亂碼或者是中文,并不是字節(jié)序列。這是因?yàn)槟阏{(diào)用 print 語(yǔ)句的時(shí)候,默認(rèn)進(jìn)行了隱式解碼,為的是讓人類(lèi)看見(jiàn)友好的字符數(shù)據(jù) ,也就是默認(rèn)的進(jìn)行了str()包裝,想看見(jiàn)背后真正的十六進(jìn)制數(shù),你需要調(diào)用魔術(shù)方法 _repr_()

什么叫解碼(decode)?

對(duì)應(yīng)的,解碼就是將字節(jié)序列按照編碼規(guī)則(如UTF-8)解釋成unicode形式。

這里寫(xiě)圖片描述

這里或許又會(huì)有疑問(wèn),編碼解碼都是十六進(jìn)制,那中文字符咋顯示的?
這又要結(jié)合你的環(huán)境了。看完我上面推薦的文章,你就會(huì)明白,Unicode只是一種標(biāo)準(zhǔn),而具體的編碼才是實(shí)現(xiàn)方式。有了正確的Unicode編碼,僅僅代表你有了正確的英文文獻(xiàn),想翻譯成中文,還得再轉(zhuǎn)換一次。而這一次轉(zhuǎn)換,是你的環(huán)境幫你完成。舉個(gè)例子,你打開(kāi)一個(gè)文檔,發(fā)現(xiàn)是亂碼,多半是文本編輯器的解碼方式有問(wèn)題,換個(gè)解碼規(guī)則就好了。

0x02 Python2 和 Python3 之間的區(qū)別

Python3 一切都很美好

在Python3當(dāng)中,文本字符串類(lèi)型(使用Unicode數(shù)據(jù)存儲(chǔ))被命名為 str , 字節(jié)字符串類(lèi)型被命名為 bytes 。一般情況下,實(shí)例化一個(gè)字符串會(huì)得到一個(gè) str 對(duì)象 :

這里寫(xiě)圖片描述

所以現(xiàn)在很多人都說(shuō),Python3默認(rèn)是Unicode,也就是這個(gè)意思。

如果你想得到bytes,那就在文本之前加上前綴 b , 或者 encode 一下。

這里寫(xiě)圖片描述

所以,很顯然,str 對(duì)象有一個(gè)encode方法,bytes 對(duì)象有一個(gè)decode方法。

Python2 相當(dāng)?shù)牟俚?,甚至?xí)`導(dǎo)你

在Python3中的 str 對(duì)象在Python2中叫做 unicode ,感覺(jué)很通俗對(duì)吧?但 bytes 對(duì)象在Python2中叫做 str ,對(duì)。。就是你平時(shí)用的 str , 默認(rèn)的那個(gè)。。。

如果你想得到一個(gè)文本字符串,你需要在字符串之前加上前綴 u 或者 decode 一下。

搞笑的還不止這么點(diǎn),Python2中的 str (字節(jié)) 對(duì)象,竟然有一個(gè) encode 方法?。?!而且你別指望它有什么特殊用處,它就是用來(lái)報(bào)錯(cuò)的,永遠(yuǎn)都別使用它?。?!

同樣的,unicode (文本字符) 對(duì)象也有一個(gè)用來(lái)報(bào)錯(cuò)的 decode 方法。

我們嘗試一下:

這里寫(xiě)圖片描述

不知道大家注意到錯(cuò)誤信息沒(méi)有,我們?cè)谶M(jìn)行解碼,規(guī)則是GBK,但它說(shuō) 無(wú)法用 ascii 進(jìn)行編碼 ,這是為什么?

這就是Python2自作聰明為了對(duì)一個(gè)unicode對(duì)象執(zhí)行解碼而進(jìn)行的隱式編碼 ,等于以下代碼:

b.encode('ascii').decode('GBK')

這就是為什么很多人說(shuō),Python2的編碼很操蛋。

0x03 小結(jié)

如果你在用2.X,請(qǐng)養(yǎng)成在字符串加上 u 前綴的習(xí)慣,統(tǒng)一編碼UTF-8,如果windows控制臺(tái)或者Pycharm控制臺(tái)依舊出現(xiàn)亂碼,那多半是控制臺(tái)編碼不同,改過(guò)來(lái)就好。

參考書(shū)籍 《Python 高級(jí)編程》

總結(jié)

到此這篇關(guān)于Python2與Python3關(guān)于字符串編碼處理的差別總結(jié)的文章就介紹到這了,更多相關(guān)Python2與Python3字符串編碼處理差別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django框架模板介紹

    Django框架模板介紹

    今天小編就為大家分享一篇關(guān)于Django框架模板介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • flask上傳作品之dbm操作的實(shí)現(xiàn)

    flask上傳作品之dbm操作的實(shí)現(xiàn)

    本文主要介紹了flask上傳作品之dbm操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • python sklearn常用分類(lèi)算法模型的調(diào)用

    python sklearn常用分類(lèi)算法模型的調(diào)用

    這篇文章主要介紹了python sklearn常用分類(lèi)算法模型的調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 基于Tensorflow批量數(shù)據(jù)的輸入實(shí)現(xiàn)方式

    基于Tensorflow批量數(shù)據(jù)的輸入實(shí)現(xiàn)方式

    今天小編就為大家分享一篇基于Tensorflow批量數(shù)據(jù)的輸入實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python中使用Chaco繪圖庫(kù)

    Python中使用Chaco繪圖庫(kù)

    這篇文章主要介紹了Python中使用Chaco繪圖庫(kù),Chaco是一個(gè)2D的繪圖庫(kù),如果你安裝了Python(x,y)的話(huà),可以在pythonxy的安裝目錄下的找到Chaco的demo程序,Chaco提供了類(lèi)似Matlab和pylab的繪圖方式,我們稱(chēng)之為面向腳本的繪圖方式
    2023-11-11
  • pandas把所有大于0的數(shù)設(shè)置為1的方法

    pandas把所有大于0的數(shù)設(shè)置為1的方法

    今天小編就為大家分享一篇pandas把所有大于0的數(shù)設(shè)置為1的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 深入解答關(guān)于Python的11道基本面試題

    深入解答關(guān)于Python的11道基本面試題

    這篇文章主要介紹了關(guān)于Python的11道基本面試題,其中單引號(hào),雙引號(hào),三引號(hào)的區(qū)別、Python的參數(shù)傳遞是值傳遞還是引用傳遞以及什么是lambda函數(shù)?它有什么好處?等一系列的基礎(chǔ)面試題,文中給出了詳細(xì)的解答,需要的朋友可以參考學(xué)習(xí)。
    2017-04-04
  • Python發(fā)送郵件的實(shí)例代碼講解

    Python發(fā)送郵件的實(shí)例代碼講解

    在本篇文章里小編給大家整理的是關(guān)于Python發(fā)送郵件的實(shí)例代碼講解內(nèi)容,需要的朋友們可以參考下。
    2019-10-10
  • 使用Python實(shí)現(xiàn)全攝像頭拍照與鍵盤(pán)輸入監(jiān)聽(tīng)功能

    使用Python實(shí)現(xiàn)全攝像頭拍照與鍵盤(pán)輸入監(jiān)聽(tīng)功能

    這篇文章主要介紹了使用Python實(shí)現(xiàn)全攝像頭拍照與鍵盤(pán)輸入監(jiān)聽(tīng)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • pandas高效讀取大文件的示例詳解

    pandas高效讀取大文件的示例詳解

    使用?pandas?進(jìn)行數(shù)據(jù)分析時(shí),第一步就是讀取文件,所以這篇文章主要來(lái)和大家討論一下pandas如何高效讀取大文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-01-01

最新評(píng)論