最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

老生常談Python基礎(chǔ)之字符編碼

 更新時間:2017年06月14日 08:55:53   投稿:jingxian  
下面小編就為大家?guī)硪黄仙U凱ython基礎(chǔ)之字符編碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

字符編碼非常容易出問題,我們要牢記幾句話:

1.用什么編碼保存的,就要用什么編碼打開

2.程序的執(zhí)行,是先將文件讀入內(nèi)存中

3.unicode是父編碼,只能encode解碼成其他編碼格式

utf-8,GBK這些是子8編碼,只能decode編碼成Unicode

一、什么是字符編碼

我們知道,計(jì)算機(jī)只能識別二進(jìn)制,我們平時寫的代碼都需要轉(zhuǎn)成二進(jìn)制才能被計(jì)算機(jī)識別。所以,我們寫的字符怎么轉(zhuǎn)換成二進(jìn)制呢,這個過程實(shí)際就是通過一個標(biāo)準(zhǔn)使我們寫的字符與特定數(shù)字一一對應(yīng),這個標(biāo)準(zhǔn)就稱為字符編碼。

字符------(字符編碼)------->數(shù)字

二、字符編碼發(fā)展歷程

1.ASCII碼

計(jì)算機(jī)起源于美國,字符編碼也起源于美國。但是美國人民使用的文字只有26個字母,再加上些特殊符號就搞定了。不像我們中國,小學(xué)生就要認(rèn)識幾千個漢字。所以美國人民就使用了ASCII碼(美國信息交換標(biāo)準(zhǔn)碼)作為字符編碼,一個Bytes代表一個字符,1Bytes=8bit,可以有2的8次方即256中不同的變化,但最初只用了前7位,即127個字符,已經(jīng)足夠美國人民使用了(當(dāng)然也出于成本的考慮)。后來將拉丁文編入第8位,至此,ASCII碼就被占滿了,英語國家和拉丁國家可以愉快的玩耍了。

2.GBK

別看咱們中國暫時科技比不上美帝國,但是咱們有一顆積極向上的心啊,于是,在1980年,國家標(biāo)準(zhǔn)總局發(fā)布了中文使用的字符編碼-->GBK,使用兩個字節(jié)表示一個漢字,這樣就有2的16次方即65536種組合,已經(jīng)足夠漢字使用了。

同時,其他國家也分別發(fā)布了自己國家的字符編碼標(biāo)準(zhǔn),如日本的shift_JIS,韓國的Euc-kr等等

3.Unicode

據(jù)說,字符編碼鼎盛時期有數(shù)百種,且彼此間互相不支持,看來各國人民都很有骨氣,但是這太不利于世界的互通了,于是Unicode應(yīng)運(yùn)而生。1994年,國際標(biāo)準(zhǔn)化組織發(fā)布了號稱萬國碼的Unicode,用兩個字節(jié)表示一個字符,有65536種組合,已經(jīng)能把全世界絕大多數(shù)語言包括了。

4.utf-8

Unicode雖然好,但有一個問題,本來用一個字節(jié)就能表示的英文,現(xiàn)在要用兩個字節(jié),存儲空間平白多出一倍,這顯然是不完美的,所以又產(chǎn)生了utf-8,對英文字符只用1個字節(jié),對中文字符用3個字節(jié)來表示?!?/span>

5.Unicode所有字符都是兩個字節(jié),簡單粗暴,字符轉(zhuǎn)換成數(shù)字的速度快,但是占用存儲空間大

utf-8對不同的字符采用不用的長度表示,節(jié)省空間,但是轉(zhuǎn)換效率不如Unicode快

內(nèi)存中使用的字符編碼是Unicode,內(nèi)存就是為了加快速度的,所以寧肯犧牲一點(diǎn)空間,也要保證速度

硬盤和網(wǎng)絡(luò)傳輸是用utf-8的,因?yàn)榇疟PI/O或者網(wǎng)絡(luò)I/O延遲要遠(yuǎn)大于utf-8的轉(zhuǎn)換效率,并且在網(wǎng)絡(luò)傳輸中應(yīng)該盡可能節(jié)省帶寬

三、Python解釋器執(zhí)行

第一階段:python解釋器啟動,此時就相當(dāng)于啟動了一個文本編輯器

第二階段:python解釋器作為文本編輯器,去打開t.py文件,從硬盤上將t.py的文件內(nèi)容讀入到內(nèi)存中

第三階段:python解釋器解釋執(zhí)行剛剛加載到內(nèi)存中t.py的代碼

其中第二階段,t.py文件在保存時有一個字符編碼,在Python解釋器打開文件時也要指定一樣的編碼方式(Python2默認(rèn)的編碼方式是ASCII,Python3默認(rèn)是utf-8),如果文件保存的編碼格式和Python解釋器默認(rèn)的編碼方式不一樣,就要在文件的開頭寫上#coding: ,來告訴python解釋器不要用自己默認(rèn)的編碼方式來讀,而是要用頭文件指定的方式來讀文件,這樣才不會出錯。

第三階段:讀取已經(jīng)加載到內(nèi)存中的代碼(默認(rèn)是Unicode),然后執(zhí)行,執(zhí)行過程中如果碰到類似定義變量的操作,就會在內(nèi)存中開辟一塊新的內(nèi)存空間。此時注意,新開辟的內(nèi)存空間不一定也是Unicode,用戶可以在定義變量的時候指定編碼方式,定義時開辟的內(nèi)存空間,也只是一塊空間而已,可以存放任意編碼格式的代碼。以Python3為例

四、編碼解碼

保存文件是把內(nèi)存中的文件保存到硬盤上

讀文件是把硬盤中的文件讀到內(nèi)存

Unicode是父編碼,utf-8,GBK這些是子編碼,如果子碼想轉(zhuǎn)換成其他編碼,必須要先轉(zhuǎn)換成父編碼,再由父編碼轉(zhuǎn)換成其他子編碼

解碼就是decode,是由子碼轉(zhuǎn)成父碼Unicode的過程

編碼就是encode,是由Unicode轉(zhuǎn)換成其他編碼的過程

之前說過,文件讀入內(nèi)存中,就成了Unicode編碼(當(dāng)然這是默認(rèn)情況,也可以根據(jù)指令更改),從硬盤讀文件的過程就是把硬盤中的utf-8解碼成Unicode

文件保存時,就是由內(nèi)存保存到硬盤的過程,硬盤中是utf-8的編碼方式,需要由Unicode編碼成utf-8

五、Python2和Python3的區(qū)別

1.Python2的默認(rèn)編碼方式是ASCII,打開utf-8保存的文件時會報(bào)錯,應(yīng)該在頭文件上加#coding : utf-8

Python2中的str被識別為Bytes,所以Python2中的str是被編碼后的結(jié)果,其實(shí)會默認(rèn)做一件事,就是在str前面加一個u,先轉(zhuǎn)換成Unicode,在encode成bytes

Python2中有兩種字符串類型,str和Unicode,str可以通過在前面加個‘u'來轉(zhuǎn)換成Unicode

2.python 3 的默認(rèn)編碼方式是utf-8,可以直接打開用utf-8保存的文件

Python3中的str被識別成Unicode

Python3中也有兩種字符串類型(bytes和str),但bytes就是bytes,str是unicode

六、打印到終端

首先要知道,Windows的終端的默認(rèn)編碼方式是GBK

終端也是應(yīng)用程序,是運(yùn)行在內(nèi)存中的,所以我們用print()打印的過程,是從內(nèi)存中到內(nèi)存中。所以對于unicode,怎么打印都不會出錯,但是Python2中除了加‘u'的字符串外,其他的字符串是Bytes,此時終端中是GBK編碼,而Python2中是指定的utf-8或者默認(rèn)的ascii碼時,在終端中打印就會出錯。

這些是我目前的理解,如果我以后意識到錯誤或者有表述不清的地方,再來修改。唉,字符編碼是個坑啊

以上這篇老生常談Python基礎(chǔ)之字符編碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python使用Rich實(shí)現(xiàn)美化終端顯示效果

    Python使用Rich實(shí)現(xiàn)美化終端顯示效果

    Rich庫的功能就像它的名字一樣,使Python編程更加豐富(rich),用來幫助開發(fā)者在控制臺(命令行)輸出中創(chuàng)建豐富、多彩和具有格式化的文本,下面我們就來了解下它的具體使用吧
    2024-02-02
  • python求兩個時間的時間差(實(shí)例代碼)

    python求兩個時間的時間差(實(shí)例代碼)

    我們在用python進(jìn)行分析的時候,可能會碰到計(jì)算兩個日期的時間差。下面為大家介紹一下如何計(jì)算兩個時間的時間差,需要的朋友可以參考下
    2022-11-11
  • python批量連接服務(wù)器檢查容器是否正常

    python批量連接服務(wù)器檢查容器是否正常

    在生產(chǎn)中,我們可能有很多項(xiàng)目或者很多環(huán)境,可能會部署在幾百上千的服務(wù)器里面,我們該怎么定時去監(jiān)控這些服務(wù)器里面的容器服務(wù)器是否正常呢,本文就來為大家講解
    2024-01-01
  • 在MAC上搭建python數(shù)據(jù)分析開發(fā)環(huán)境

    在MAC上搭建python數(shù)據(jù)分析開發(fā)環(huán)境

    這篇文章主要介紹了在MAC上搭建python數(shù)據(jù)分析開發(fā)環(huán)境的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • python基于openpyxl生成excel文件

    python基于openpyxl生成excel文件

    這篇文章主要介紹了python基于openpyxl生成excel文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 關(guān)于python實(shí)現(xiàn)json/字典數(shù)據(jù)中所有key路徑拼接組合問題

    關(guān)于python實(shí)現(xiàn)json/字典數(shù)據(jù)中所有key路徑拼接組合問題

    這篇文章主要介紹了關(guān)于python實(shí)現(xiàn)json/字典數(shù)據(jù)中所有key路徑拼接組合問題,文中有詳細(xì)的代碼說明,需要的朋友可以參考下
    2023-04-04
  • python os模塊使用方法介紹

    python os模塊使用方法介紹

    OS ( Operating System 操作系統(tǒng) ) 操作系統(tǒng)模塊;它是屬于python的標(biāo)準(zhǔn)庫,常用于處理文件和目錄(文件夾)的操作。本文為大家總結(jié)了這個模塊的常用方法,希望有所幫助
    2022-08-08
  • 基于Python的數(shù)據(jù)分析與可視化

    基于Python的數(shù)據(jù)分析與可視化

    在當(dāng)今數(shù)字化時代,數(shù)據(jù)分析和可視化已經(jīng)成為了企業(yè)和個人必備的技能,Python 作為一種高級編程語言,具有易學(xué)易用、高效快捷的特點(diǎn),在數(shù)據(jù)科學(xué)領(lǐng)域中得到了廣泛應(yīng)用,本篇文章將介紹基于 Python 的數(shù)據(jù)分析與可視化
    2023-07-07
  • 利用python創(chuàng)建和識別PDF文件包的方法

    利用python創(chuàng)建和識別PDF文件包的方法

    PDF 文件包(Portfolio)是將多個文件組合成一個單獨(dú)的 PDF 文檔,它作為一種綜合且交互式的展示形式,可以展示各種類型的內(nèi)容,本文將介紹如何使用 Spire.PDF for Python 在 Python 中創(chuàng)建和識別 PDF 文件包,需要的朋友可以參考下
    2024-05-05
  • 使用ITK-SNAP進(jìn)行摳圖操作并保存mask的實(shí)例

    使用ITK-SNAP進(jìn)行摳圖操作并保存mask的實(shí)例

    這篇文章主要介紹了使用ITK-SNAP進(jìn)行摳圖操作并保存mask的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評論

鄂温| 吉木萨尔县| 绥中县| 方城县| 英吉沙县| 斗六市| 莒南县| 屏东县| 米林县| 德格县| 沁源县| 柳河县| 定陶县| 定南县| 百色市| 镇雄县| 永嘉县| 奈曼旗| 银川市| 罗城| 石棉县| 松潘县| 泌阳县| 防城港市| 安图县| 望江县| 上林县| 武义县| 望奎县| 神池县| 衡山县| 郎溪县| 法库县| 正安县| 蓝田县| 宜宾县| 微博| 卢龙县| 无棣县| 枣阳市| 彭州市|